0

我正在使用 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”并按下回车键,参数读取正确。但是,如果我使用自己的 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

似乎是某种编码问题,但我还没有弄清楚。

4

1 回答 1

1

你不会用一个字符来终止你的 python 字符串,这个字符会向Arduino 的 Serial.parseFloat()发出浮点数 2.5 也完成的信号。pyserialsSerial.flush也不能确保这一点,它仅意味着确保缓冲的串行数据“在线上”。因此,您看不到inData[2] = 2.5,即使它几乎就在那里。基本上,Arduino 仍在等待字符,因为它不知道 2.5 是否已终止,或者是否还会出现更多数字。

至于inData[0]是0.00,我只能猜测它是一个未完成的解析的剩余部分。

尝试

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

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

于 2014-09-08T21:35:43.397 回答