Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Arduino Serial.Read()与Raspberry Pi Serial.write()不稳定_Python_Arduino_Raspberry Pi - Fatal编程技术网

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

Python Arduino Serial.Read()与Raspberry Pi Serial.write()不稳定,python,arduino,raspberry-pi,Python,Arduino,Raspberry Pi,我正在构建一些东西,其中Raspberry Pi连接到数据库以检查值是否正确。如果该值正确,它将通过Serial.write()向Arduino发送一个信号。然后Arduino读取该数据,如果Arduino读取1,则应通过引脚13发送高信号 这在几个月前就奏效了,但上周我试了几次才奏效。似乎Arduino并不总是能够读取Pi发送的信号。大多数情况下,它只在我做出改变后第一次起作用,然后它似乎不再读取信号 Arduino代码: intn; 无效设置(){ pinMode(13,输出); pinMo

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

这在几个月前就奏效了,但上周我试了几次才奏效。似乎Arduino并不总是能够读取Pi发送的信号。大多数情况下,它只在我做出改变后第一次起作用,然后它似乎不再读取信号

Arduino代码:

intn;
无效设置(){
pinMode(13,输出);
pinMode(10,输入);
Serial.begin(9600);
n=7;
}
void循环(){
if(Serial.available()){
n=串行.read()-“0”;
}
如果(n==1){
数字写入(13,高);
}
否则{
数字写入(13,低);
}
int rst=数字读取(10);
如果(rst==高){
n=7;
}
}
Raspberry Pi Python代码,该代码通过Serial.write((arduinoSerialData.write())发送信号

如果strscan==条形码:
打印('代码有效')
arduinoSerialData.write('1')
打破
其他:
打印('代码无效')
arduinoSerialData.write('2')

您是否手动检查了RPi是否确实在发送内容

如果你有,而且是这样,恐怕你的问题的答案与软件无关。底线是,RPi与3v3信号一起工作,而大多数Arduino板都与5V信号一起工作。为了使它更复杂,pi可以发送5V信号,但其输入最多只能占用3v3。当你在这样一个引脚上加5V时,pi可能不会上升立即吸烟,但长时间暴露在5V下最终可能会伤害pi,并导致无法解释的行为,例如你所描述的

你是说pi是通过串行连接的。如果它是双向连接的,并且Arduino正在向pi发送数据,这将导致问题

此外,Arduino的数字输入引脚的配置使其触发电压高于某个阈值。我不知道您正在使用的Arduino板的该值。但如果该值约为3.3伏或更高,则pi的信号可能会刚好到低电压以触发Arduino

上述问题的解决方案是逻辑电平转换器。将一个Vcc连接到3v3,另一个连接到5V。然后通过该逻辑电平转换器布线,将pi和Arduino连接到彼此。llc将负责电压转换。确保获得llc这是双向的,这将节省很多麻烦。例如,这是一个合适的方法。

你说的“做出改变”是什么意思?上传程序?重置Arduino?代码段使用标准的串行函数,因此我将首先查看其他可能的源代码。例如,Arduino代码的结构方式,序列行中“1”后面的任何噪声都将触发else条件,使其看起来像“1”从未发送过。最好有一些w显示Arduino正在读取的内容的方法;您是否尝试手动发送信号?