我想定期读取串行端口上的数据和Arduino。所以本质上是这样的
- 读一读
- Wait
- 读一读
- Wait
- 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(使用前将#替换为@)