【发布时间】:2012-09-21 19:17:00
【问题描述】:
我需要从 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 发送和接收浮点数据之外还有其他想法吗?
【问题讨论】:
-
看起来您正在将数据从 arduino 发送到 python ...而不是从 python 到 arduino,正如标题所暗示的那样...
-
我认为他的意思是标题中的往返。 tez,如果是这种情况,请更改。
-
你为什么要读 5 个字节,看来你只发送了 4 个。
-
是的,上面的所有代码都是用于将数据从 arduino 发送到 python。我首先尝试“arduino 到 python”部分。但是关于“将浮点数据从 python 发送到 arduino 和正如我在问题中提到的那样,欢迎在 python 端接收相同的数据。
-
@CrazyCasta 是的,对不起。那是一个错误。我正在尝试不同的东西(添加新行字符等)。我会编辑它