从arduin收集“双”型数据

2024-04-16 23:00:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着把浮点数据从arduino发送到Python数据以8个连续字节的形式发送(大小为double),后跟换行符('\n')。如何在python端(系统端)收集这些连续字节并将其转换为正确的格式

^{1}$

Python代码。当然这不会以正确的格式打印数据,只是想显示我所做的努力。在

^{pr2}$

更新

my_ser = serial.Serial('/dev/tty.usbmodemfa131',19200)

while 1:
    #a = raw_input('enter a value:')
    #my_ser.write(a)
    data = my_ser.read(5)
    f_data, = struct.unpack('<fx',data)
    print f_data
    #time.sleep(0.5)

使用上面代码中所示的struct模块可以打印浮点值。但是

50%的时间,数据是打印出来的没错。但是如果我搞砸了时间。睡觉()或者停止传输并重新启动,会打印出不正确的值。我猜在这个文件中,解包的是错误的4字节集任何情况下我们能在这里做些什么吗??在


Tags: 数据代码data字节my系统格式时间
1条回答
网友
1楼 · 发布于 2024-04-16 23:00:01

在Arduino上,double是{a1},即占用4字节内存的一个小的尾数single-precision floating-point number。这意味着您应该精确读取5个字节,使用f格式的little endian变量来解压它,并忽略后面带有x的换行符:

import struct
...

data = my_port.read(5)
num, = struct.unpack('<fx', data)

请注意,您不希望使用readline,因为表示浮点数的任何字节都可以是'\n'。在

正如Nikklas B.指出的,您甚至根本不需要为换行符操心,只需发送4个字节并从Python中读取同样多的字节即可。在这种情况下,格式字符串将是'<f'。在

相关问题 更多 >