Я использую код python (работает на малине pi) в цикле, который очень чувствителен к времени (не должен отклоняться намного больше, чем + =. 0001 s). Я обнаружил, чтоЗачем нужна pyserial pausing python program
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))