忽略写入串行端口的数据,直到使用 pyserial 读取
Ignore data written to serial port until read using pyserial
我遇到了与此 post 中所示相同的问题,但提出的解决方案虽然有所帮助,但效果不佳。
Reading a Serial Port - Ignore portion of data written to serial port for certain time
不过,我认为 Farmer Joe 的解决方案也有同样的问题——数据有时会被切成两半,例如:
b'2.36\r\n'
b'2.36\r\n'
b'2.36\r\n'
b'\n'
b'\r\n'
b'36\r\n'
b'2.36\r\n'
b'2.36\r\n'
但最终的解决方案从未 posted!
我发现了一个简单的方法,它涉及在需要时关闭和打开端口,而不是在需要读取缓冲数据时刷新 com 端口 - 这在间歇性读取时有效。
serial.open()
while (serial.inWaiting()==0): #wait until there is data
pass
valueRead = serial.readline()
serial.close()
第二种解决方案是丢弃第一个值。我发现这种方法在以所需频率阅读时效果很好。例如,当数据以 1000Hz 的频率发送到 com 端口时,端口以 0.1Hz 的频率读取,则在 1s 的周期内读取 100 个样本。
serial.flushInput()
serial.readline() #do not save this value - throw away
while (serial.inWaiting()==0): #wait until there is data
pass
valueRead = serial.readline() #keep this value
我遇到了与此 post 中所示相同的问题,但提出的解决方案虽然有所帮助,但效果不佳。
Reading a Serial Port - Ignore portion of data written to serial port for certain time
不过,我认为 Farmer Joe 的解决方案也有同样的问题——数据有时会被切成两半,例如:
b'2.36\r\n'
b'2.36\r\n'
b'2.36\r\n'
b'\n'
b'\r\n'
b'36\r\n'
b'2.36\r\n'
b'2.36\r\n'
但最终的解决方案从未 posted!
我发现了一个简单的方法,它涉及在需要时关闭和打开端口,而不是在需要读取缓冲数据时刷新 com 端口 - 这在间歇性读取时有效。
serial.open()
while (serial.inWaiting()==0): #wait until there is data
pass
valueRead = serial.readline()
serial.close()
第二种解决方案是丢弃第一个值。我发现这种方法在以所需频率阅读时效果很好。例如,当数据以 1000Hz 的频率发送到 com 端口时,端口以 0.1Hz 的频率读取,则在 1s 的周期内读取 100 个样本。
serial.flushInput()
serial.readline() #do not save this value - throw away
while (serial.inWaiting()==0): #wait until there is data
pass
valueRead = serial.readline() #keep this value