Ок, я этого не понимаю. Я посмотрел везде, но я не понимаю, почему это не работает:Python: Последовательный тайм-аут не работает при использовании readline
def main():
time = sys.argv[1]
ser = serial.Serial('/dev/ttyACM0',9600, timeout=1)
paramstr= "A 5 " + time + " 0 0 0"
ser.write(paramstr)
print 'sent'
print 'now listening...'
while True:
dbstr = ser.readline()
fo.write(str(dbstr));
fo.close()
ser.close()
print 'exiting.'
Это в python
мой def main
. То, что я делаю, отправляет строку за serial
из моей малины Pi в мой Teensy (Arduino). Teensy успешно запускает программу и отправляет 1200 строк назад по serial
в малину. Это работает до сих пор.
Не работает петля while
. Данные записываются в файл, но цикл продолжается вечно, хотя передача (Teensy-> RPi) уже остановлена. В этом случае я реализовал timeout=1
, но, похоже, его игнорируют. Программа не выходит из цикла while.
Может ли кто-нибудь помочь? Заранее спасибо!
Почему вас не волнует дыхание (teensy). Ваша скорость равна «9600», поэтому нужно подождать '0,3' секунду (минимальный и каждый цикл). Какая сторона отправляет сначала (для чистого буфера)? – dsgdfg
Время окончания работы после завершения команды 'read'. Вы использовали 'readline', но не знаете, сколько строк у вас есть? Попробуйте: 'ser.read (ser.inWaiting())' очистить все данные в буфере для исключения последовательного тайм-аута. – dsgdfg
Не имеет значения, использую ли я 'ser.read (ser.inWaiting())' или просто 'ser.read()' или 'ser.readline()'. Малина посылает первую (одну строку), ответы Teensy/Arduino - около 1200 строк в минуту. Как вы думаете, я должен увеличить тайм-аут? – Markus