Python 通过Arduinos串行连接解析浮点数
我用Arduino Uno控制来自磁性传感器的脉冲。在操作开始之前,我需要读取两个浮点数作为计算的参数。 我的arduino代码如下:Python 通过Arduinos串行连接解析浮点数,python,serial-port,pyserial,arduino-uno,Python,Serial Port,Pyserial,Arduino Uno,我用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; } } 如果
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”,然后按enter键,参数读取正确。
但是如果我使用自己的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
这似乎是某种编码问题,但我还没有解决。您的python字符串不能以表示浮点数2.5也已完成的字符结尾。pyserials的
Serial.flush
也不能确保这一点,它只意味着确保缓冲的串行数据是“在线的”。因此,您不会看到inData[2]=2.5
,即使它几乎就在那里。基本上,Arduino仍在等待字符,因为它不知道2.5是否终止,或者后面是否还会有更多的数字
至于inData[0]
为0.00,我只能猜测这是未完成解析的剩余部分
试一试
并确保从一开始就有一个空的串行连接
sstr='{0} {1}\n'.format(1.5,2.5)