我需要正确格式化字符串,以便将其发送到通过串口连接的arduino。例如,我有这个python2.7.5代码:
x = int(7)
y = int(7000.523)
self.ser.write("%s%s" % (x, y))
但我希望x在一个字节中,y在x的不同字节中,所以我可以为arduino代码中的每个接收字节分配一个变量,类似于:
for (i=0; i<3; i++)
{
bufferArray[i] = Serial.read();
}
d1 = bufferArray[0];
d2 = bufferArray[1];
d3 = bufferArray[2];
x = d1;
y = (d2 << 8) + d3;
换句话说,我不希望y片段在x字节中。 执行此操作的正确字符串格式是什么?
答案 0 :(得分:1)
根据@Mattias Nilsson的建议,如果要发送两个连续的16位无符号整数,则会有一个示例代码:
import struct
x = int(7)
y = int(7000.523)
buf = struct.pack("<HH", x, y)
# read it back
for i in buf:
print "%02x" % (ord(i))
您可以看到它们以2个字节的形式发送,LSB字节始终是第一个。 (在intel x64机器python 2.7.5上测试过)
编辑:您应该能够在格式字符串的开头使用<
字符显式设置endiannes for little endian order。
然后你可以使用Serial.write发送缓冲区和字符串:
self.ser.write(buf+yourstring+'\0')
你不能理会终止你的字符串的零字符。如果你发送这样的字符串,你不应该在你的字符串中发送任何零字节字符。
在arduino端,你应首先读取并解码这两个整数然后读取一个循环中的字符,如果你读取零字节将结束读取。你一定要检查你的阅读缓冲区是否也不会溢出。