我需要从 Python 向 Arduino 发送浮点数据并返回相同的值。我想先从 Arduino 发送一些浮点数据。数据以 4 个连续字节的形式发送。我试图弄清楚如何收集这些连续的字节并将其转换为 Python 端(系统端)的正确格式
Arduino代码:
void USART_transmitdouble(double* d)
{
union Sharedblock
{
char part[4];
double data;
} my_block;
my_block.data = *d;
for(int i=0;i<4;++i)
{
USART_send(my_block.part[i]);
}
}
int main()
{
USART_init();
double dble=5.5;
while(1)
{
USART_transmitdouble(&dble);
}
return 0;
}
Python代码(系统端):
my_ser = serial.Serial('/dev/tty.usbmodemfa131',19200)
while 1:
#a = raw_input('enter a value:')
#my_ser.write(a)
data = my_ser.read(4)
f_data, = struct.unpack('<f',data)
print f_data
#time.sleep(0.5)
使用struct
上面代码所示的模块可以打印浮点值。
50% 的时间,数据打印正确。但是,如果我弄乱time.sleep()
或停止传输并重新启动它,则会打印出不正确的值。我认为在这种情况下解包了错误的 4 个字节集。知道我们可以在这里做什么吗?
除了使用 struct 模块向 Arduino 发送和接收浮点数据外,还有其他想法吗?