所以我在Python和Arduino Uno之间的串行通信存在问题。我让Python通过串行通信将数字38(连同其他数字)发送到Arduino,然后返回到Python。
我发送的数组是:
[230, 0, 0, 0, 38]
它打印出来的数组(使用print()时)是:
bytearray(b'\xe6\x00\x00\x00&
&符号在那里是因为在字节数据的打印中有一个奇怪的细微差别,当数字在一定范围之间时(抱歉我记不起范围)它用ASCII打印出来而不是十六进制,所以我发送给Arduino的数组应该仍然拥有所需的所有信息。
我通过以下方式收到Arduino中的信息:
char values[5];
Serial.readbytes(values, 5);
一旦arduino发现了这些信息,我就会使用Serial.write将其发送回Python,在那里我打印出来以确保我收到了正确的信息。 Python中收到的输出是:
b'\xe6\x00\x00\x00\xf6'
其中0xe6是230(正确)而0xf6是246,这是不正确的,它应该是38的十六进制值,即0x26。
有没有人对如何解决此问题有任何建议?任何建议或帮助将不胜感激!
编辑: 发现我的问题,我不小心错了'0',因为有一次我认为我必须将信息从ASCII转换为十六进制,但事实证明我没有。谢谢你的帮助!
答案 0 :(得分:0)
<强> test.ino 强>
char buffer[10] = {0,0,0,0,0,0,0,0,0,0};
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.println(Serial.readBytes(buffer,5));
}
<强> test.py 强>
import serial
s=serial.Serial("COM5",timeout=5)
time.sleep(5) # wait a couple seconds
s.write(b"\xe6\x00\x00\x00&")
# or alternatively
# s.write(bytes(bytearray([0xe6,0x00,0x00,0x00,0x26])))
print(repr(s.read(1000)));
这是最小代码示例的样子......它也应该有用......