通过Arduino串口连接解析浮点数
我正在使用Arduino Uno来控制一个磁传感器发出的脉冲。在开始操作之前,我需要读取两个浮点数作为计算的参数。
我的Arduino代码如下:
int i=0;
while (true) //wait until parameters are read
{
if (Serial.available())
{
inData[i++]=Serial.parseFloat();
}
if (i>=initLength) {
return true;
}
}
如果我使用内置的串口监视器,就没有问题,我可以输入“1.5 2.5”,然后按回车键,参数就能正确读取。
但是如果我用自己的Python程序,就不行了。我使用pyserial来将参数发送到Arduino。
sstr='{0} {1}'.format(1.5,2.5)
ser.write(sstr.encode('ascii'))
ser.flush()
如果我通过Python发送数据,保存到变量中的内容是:
inData[0]: 0.00
inData[1]: 1.5
看起来像是某种编码问题,但我还没有搞明白。
1 个回答
1
你没有用一个特定的字符来结束你的Python字符串,这个字符可以告诉Arduino的Serial.parseFloat(),浮点数2.5已经结束了。而pyserial的Serial.flush
并不能保证这一点,它只是确保已经缓存的串口数据被“发送出去”。所以,你没有看到inData[2] = 2.5
,尽管它几乎要到了。基本上,Arduino还在等待字符,因为它不知道2.5是否已经结束,或者后面是否还有更多数字。
至于inData[0]
是0.00,我只能猜测这是一个未完成解析的残余。
试试
sstr='{0} {1}\n'.format(1.5,2.5)
并确保从一开始就有一个空的串口连接。