读取串行端口 - 忽略在一定时间内写入串行端口的部分数据

2024-02-10

我想定期读取串行端口上的数据和Arduino。所以本质上是这样的

  1. 读一读
  2. Wait
  3. 读一读
  4. Wait
  5. Take ...

etc.

我面临的问题是端口将缓冲其信息,因此一旦我调用等待函数,串行端口上的数据就会开始缓冲。等待函数完成后,我尝试再次读取数据,但我是从缓冲区的开头读取数据,并且数据不再是当前的,而是大约在等待函数开始时读取的数据。

我的问题是,是否有一种我不知道的方法可以忽略在等待期间读入的数据部分,而只读取当前在串行端口上传送的数据?

到目前为止我有类似的东西:

import serial

s = serial.Serial(path_to_my_serial_port,9600)

while True:
    print s.readline()
    time.sleep(.5)

出于解释目的,我让 Arduino 输出自循环开始以来的时间。根据python代码,每次调用的时间应该相隔半秒。通过串行输出,时间在不到一毫秒的时间内递增。无论睡眠时间如何,这些值都不会改变。

示例输出:

504

504

504

504

505

505

505

...

作为我的最终目标的想法,我想测量端口的值,等待一段时间,看看然后的值是什么,再等等,看看然后的值是什么,再等等。

我目前正在使用Python为此,但我对其他语言持开放态度。


如果您想在执行下一次读取之前清除输入缓冲区中的内容,可以使用 s.flushInput() 刷新输入缓冲区(您也可以使用 s.inWaiting() 检查输入缓冲区中的字节) )。

因此,添加刷新调用将确保您读取从那一刻起到达的任何字节:

while True:
    s.flushInput()
    print s.readline()
    time.sleep(.5)

您可能还需要考虑使用读取超时(当您使用超时参数创建serial.Serial对象时)。在这种情况下,您需要在超时时处理空读数,但您可以保证,如果发送者因任何原因停止,您的读者不会永远等待。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取串行端口 - 忽略在一定时间内写入串行端口的部分数据 的相关文章

随机推荐