首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Serial.write() Raspberry Pi Arduino Serial.Read()不稳定

Serial.write() Raspberry Pi Arduino Serial.Read()不稳定
EN

Stack Overflow用户
提问于 2019-12-12 00:43:28
回答 1查看 111关注 0票数 0

我正在构建一些东西,其中Raspberry Pi连接到数据库以检查值是否正确。如果值是正确的,它将通过Serial.write()向Arduino发送信号。然后,Arduino读取该数据,并且如果Arduino读取1,则它应该通过引脚13发送高信号。

这在几个月前是有效的,但当我上周尝试它时,它只起了几次作用。似乎Arduino并不总是能够读取Pi发出的信号。大多数情况下,它只能在我进行更改后的第一次工作,然后它似乎不再读取信号。

Arduino代码:

代码语言:javascript
复制
int n;

void setup(){
  pinMode(13,OUTPUT);
  pinMode(10,INPUT);
  Serial.begin(9600);
  n=7;
}

void loop(){
  if (Serial.available()){
    n = Serial.read() - '0';
  }
  if(n==1){
    digitalWrite(13,HIGH);
  }
  else{
    digitalWrite(13,LOW);
  }
  int rst = digitalRead(10);
  if(rst==HIGH){
     n=7;
  }
}

Raspberry Pi Python代码,它通过Serial.write ((arduinoSerialData.write()发送信号。

代码语言:javascript
复制
if strscan == barcode:
    print ('code valid')
    arduinoSerialData.write('1')
    break
else:
    print ('code invalid')
    arduinoSerialData.write('2')
EN

回答 1

Stack Overflow用户

发布于 2019-12-12 08:52:32

您是否手动检查过RPi是否真的在发送某些内容?

如果你有,我担心你的问题的答案与软件没有太大关系。底线是RPi在3v3信号下工作,而大多数Arduino板工作在5V。让它变得更复杂的是,pi可以发出5V的信号,但其输入只能接受3v3。当你把5V放在这样的引脚上时,圆周率可能不会立即冒烟,但长期暴露在5V下可能最终会伤害圆周率,并导致无法解释的行为,比如你所描述的。

你是说圆周率是通过串口连接的。如果它是双向连接的,而Arduino正在向pi发送数据,这将导致问题。

此外,Arduino的数字输入引脚配置为在某个阈值电压以上触发。我不知道您正在使用的Arduino板的此值。但是如果它大约是3.3V或更高,则pi的信号可以被到低电压以触发Arduino。

上述问题的解决方案是逻辑电平转换器。您可以将一个Vcc连接到3v3,另一个连接到5V。然后,通过这个逻辑电平转换器对信号线进行布线,将π和Arduino彼此连接起来。llc将负责电压转换。确保你得到一个双向的llc,这将省去很多麻烦。例如,this one就是一个合适的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59290416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档