在下面的代码中,我向一些teensy(arduino)板发送消息,以帮助我动态识别它们。问题是,这个代码每隔一段时间就被挂起(我假设)当'pot_port.read(1)'没有收到它正在寻找的字节。我怎样才能避免这种情况,或者如果它被挂断了,我该如何解决呢?
for port in current_ports:
if 'ACM' in port:
print port
pot_port = serial.Serial(port, BAUD_RATE, timeout=TIMEOUT)
time.sleep(1)
pot_port.write('#')
time.sleep(1)
response = pot_port.read(1)
print response
if response is 'a':
matrix_port = pot_port
elif response is 'b':
led_port = pot_port
更新:我采取了一些预防措施只调用.read(),如果有任何东西可以阅读这个新代码。
for port in current_ports:
if 'ACM' in port:
print port
pot_port = serial.Serial(port, BAUD_RATE, timeout=TIMEOUT)
print pot_port.inWaiting()
pot_port.flushInput()
print pot_port.inWaiting()
while pot_port.inWaiting() == 0:
pot_port.flushInput()
time.sleep(1)
pot_port.write('#')
time.sleep(1)
print pot_port.inWaiting()
response = pot_port.read(1)
pot_port.flushInput()
print response
if response is 'a':
matrix_port = pot_port
elif response is 'b':
led_port = pot_port
到目前为止似乎工作得很好,如果有人有任何建议,我全都耳朵。
答案 0 :(得分:0)
正如你所做的那样,检查等待()是一种可行的方法。
我使用的方法是将TIMEOUT设置为正值,这样如果在TIMEOUT秒内没有收到任何内容,你的.read(1)将放弃并返回一个空字符串。
pot_port = serial.Serial(port, BAUD_RATE, timeout=10)
response = pot_port.read(1)
if response:
do_something_useful()
else:
fault_response()