通过Arduinos串口连接解析浮点数

时间:2014-09-08 16:06:47

标签: 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;
  }
}

如果我使用内置串行监视器没有问题,我可以输入ie" 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

似乎是某种编码问题,但我还没想到它。

1 个答案:

答案 0 :(得分:1)

您不会使用一个字符来终止您的python字符串,该字符将向Arduino's Serial.parseFloat()发信号通知浮点数2.5也已完成。 pyserials' s Serial.flush并不能确保这两者,它只是意味着确保缓冲的串行数据是"放在线上"。出于这个原因,你没有看到inData[2] = 2.5,即使它几乎就在那里。基本上Arduino仍然在等待角色,因为它不知道2.5是否被终止或者是否还有更多的数字。

至于inData[0]为0.00,我只能猜测它是未完成解析的遗留物。

尝试

sstr='{0} {1}\n'.format(1.5,2.5)

并确保从一开始就有一个空的串行连接。