Python 是什么导致C程序在Arduino中不能正确增加变量?
我试图在Raspberry PI和Ardunio之间建立一个连接,Python在PI上运行。我们的目标是验证Arduino是否连接并发送正确的值,连接似乎是在Python终端上接收时建立的,但是Python 是什么导致C程序在Arduino中不能正确增加变量?,python,c,arduino,raspberry-pi,microcontroller,Python,C,Arduino,Raspberry Pi,Microcontroller,我试图在Raspberry PI和Ardunio之间建立一个连接,Python在PI上运行。我们的目标是验证Arduino是否连接并发送正确的值,连接似乎是在Python终端上接收时建立的,但是a值没有正确出现,它增加了2,有时超过了2。 这可能是连接延迟问题吗?串行(USB)问题 serial_text.ino(在Arduino上运行): 串行测试.py(在PI上运行): 输出(在PI屏幕上): 更新: 我做了一些更改,但仍然是相同的问题,以下是更改: serial_text.ino(在Ar
a
值没有正确出现,它增加了2,有时超过了2。
这可能是连接延迟问题吗?串行(USB)问题
serial_text.ino(在Arduino上运行):
串行测试.py(在PI上运行):
输出(在PI屏幕上):
更新:
我做了一些更改,但仍然是相同的问题,以下是更改:
serial_text.ino(在Arduino上运行):
对于Python,我只更改了这一行:
s[0] = str(int (ser.readline(),16))
致:
为了以防万一,我还删除了//print read_serial
输出:
好的,这里发生的基本情况是:当你做这样的事情时:
Serial.println(a);
它以ASCII编码的十进制形式发送数字,因此基本上,如果发送整数值12,它将发送字符串“12”。递增部分在这里工作得很好
为什么会跳绳?如果仔细查看代码,您会发现在while
循环的每次迭代中,都有两个对ser.readline()
的调用,这会导致每秒跳过一个数字
间隙较大的原因是您收到一个十进制字符串并将其视为十六进制字符串。看看这里发生了什么:
>>> int("49", 16)
73
>>> int("51", 16)
81
在十进制中,它只是两个差,但在十六进制中,它是八个差-这解释了更大的差距。这不是您真正的代码。屏幕截图与程序中的
打印不匹配。您将其作为十进制值发送,但在收到后将其转换为十六进制值int(…,16)
?您确定不使用a++运行代码吗代码>?我知道,我在这里写了print语句,但它是一样的,最后一个print语句被注释(在C注释中),我也知道,但这是基本运行的代码。当您发送十进制10
时,您将其作为10
但int(10,16)接收
给出了16
所以它跳过了一些数字。我问你是否使用a++代码>和Serial.println(++a)代码>同时-因为它可以增加2。非常感谢,问题出在这一行:s[0]=str(int(ser.readline(),16)),我把它改为s[0]=str(int(read_serial,16))
s[0] = str(int (ser.readline(),16))
s[0] = str(int (ser.readline(),10))
Serial.println(a);
>>> int("49", 16)
73
>>> int("51", 16)
81