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

0 投票
1 回答
1375 浏览
提问于 2025-04-20 12:08

我正在使用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)

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

撰写回答