我有一个Arduino连接到我的计算机上运行一个循环,每100毫秒通过串行端口将一个值发送回计算机。
我想创建一个Python脚本,它每隔几秒钟就会从串口读取一次,所以我希望它只看到从Arduino发出的最后一条消息。
在Pyserial中是如何做到这一点的?
这是我尝试过的代码,但不起作用。它按顺序读取行。
import serial
import time
ser = serial.Serial('com4',9600,timeout=1)
while 1:
time.sleep(10)
print ser.readline() #How do I get the most recent line sent from the device?
发布于 2009-07-07 17:27:56
from serial import *
from threading import Thread
last_received = ''
def receiving(ser):
global last_received
buffer = ''
while True:
# last_received = ser.readline()
buffer += ser.read(ser.inWaiting())
if '\n' in buffer:
last_received, buffer = buffer.split('\n')[-2:]
if __name__ == '__main__':
ser = Serial(
port=None,
baudrate=9600,
bytesize=EIGHTBITS,
parity=PARITY_NONE,
stopbits=STOPBITS_ONE,
timeout=0.1,
xonxoff=0,
rtscts=0,
interCharTimeout=None
)
Thread(target=receiving, args=(ser,)).start()
发布于 2014-04-12 03:35:54
您可以使用ser.flushInput()
刷新当前缓冲区中的所有串行数据。
清除旧数据后,可以使用ser.readline()从串行设备获取最新数据。
我认为它比这里提出的其他解决方案简单一点。为我工作,希望它适合你。
发布于 2010-10-23 02:53:24
这些解决方案将占用CPU,同时等待字符。
您应该至少执行一次阻塞调用来读取(1)
while True:
if '\n' in buffer:
pass # skip if a line already in buffer
else:
buffer += ser.read(1) # this will block until one more char or timeout
buffer += ser.read(ser.inWaiting()) # get remaining buffered chars
...and像以前一样做拆分。
https://stackoverflow.com/questions/1093598
复制相似问题