Почему Pyserial приостанавливает программу Python
Я использую некоторый код Python (работающий на Raspberry Pi) в цикле, который очень чувствителен ко времени (не должен отклоняться намного больше, чем +=.0001 с). Я нашел это
if serial.Serial('/dev/ttyUSB0').read(): #what to do when there is data pending
data = serial.Serial('/dev/ttyUSB0').read()
Кажется, проблема. Я редко отправляю что-либо через последовательное соединение, а когда я делаю, это меньше 10 байт. Кажется, этот код поддерживает программу до получения данных.
Например, если я получаю постоянный поток данных и распечатываю время выполнения для каждого цикла, оно составляет около 0,1 мс, что хорошо для моих целей, но если я ничего не получаю в течение минуты, то получаю данные, что цикл занял 60 секунд, чтобы завершить.
Мне нужно немного кода, чтобы пропустить работу и не задерживать программу, если в последовательном порту нет данных, ожидающих.
Вот более полная часть кода, которая может быть связана:
raspi=serial.Serial('/dev/ttyUSB0')
if raspi.read(): #what to do when there is data pending
print data #this is a messy debugging tool to see what the pi recieves
data = raspi.read()
raspi.write(confirmed + data) #this is the data confirmed message
if((str(data)[0]=='s' or str(data)[0]=='S' or str(data)[0]=='b' or str(data)[0]=='B')): #this is for going straight. Command is s# or b#, # being 1-9.
lspeed=str(data)[1]
print('lspeed is now ' + str(lspeed))
raspi.write('lspeed is now ' + str(lspeed))
rspeed=str(data)[1]
print('rspeed is now ' + str(rspeed))
raspi.write('rspeed is now ' + str(rspeed))
if(str(data)[0]=='r' or str(data)[0]=='R'):
rspeed=str(data)[1]
print('rspeed is now ' + str(rspeed))
raspi.write('rspeed is now ' + str(rspeed))
if((str(data)[0]=='l' or str(data)[0]=='L') and str(data)!='launch'):
lspeed=str(data)[1]
print('lspeed is now ' + str(lspeed))
raspi.write('lspeed is now ' + str(lspeed))
1 ответ
Замена if serial.Serial('/dev/ttyUSB0').read():
с if(serial.Serial('/dev/ttyUSB0').inWaiting>=1):
Является ли.
Этот способ пропускает код, если нет ожидающих данных. Ссылка, которую я использовал, вводит меня в заблуждение.