我正在构建一些东西,其中Raspberry Pi连接到数据库以检查值是否正确。如果值是正确的,它将通过Serial.write()向Arduino发送信号。然后,Arduino读取该数据,并且如果Arduino读取1,则它应该通过引脚13发送高信号。
这在几个月前是有效的,但当我上周尝试它时,它只起了几次作用。似乎Arduino并不总是能够读取Pi发出的信号。大多数情况下,它只能在我进行更改后的第一次工作,然后它似乎不再读取信号。
Arduino代码:
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()发送信号。
if strscan == barcode:
print ('code valid')
arduinoSerialData.write('1')
break
else:
print ('code invalid')
arduinoSerialData.write('2')发布于 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就是一个合适的选择。
https://stackoverflow.com/questions/59290416
复制相似问题