У меня есть плата Arduino, которая постоянно сбрасывает значения на последовательный порт (USB). Эти данные считываются машиной с помощью скрипта Python с использованием библиотеки pySerial. Код, который я использовал, выглядит следующим образом:
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1)
while True:
ser.flushInput() #Clear the serial input buffer
print "Value:"
print ser.readline()
print ser.readline()
print ser.readline()
time.sleep(30) #Wait for 30 seconds
Это работает отлично и дает следующий результат:
Value:
162
162
162
Value:
162
162
162
Но когда я даю в цикле гораздо большую задержку, чем 30 секунд, скажем, 1 минуту или больше:
time.sleep(60) #Wait for 60 seconds
Я начинаю получать проблемы. Печатается 1-й набор значений. С этого момента ser.readline() всегда выдает нулевые значения!
Выход:
Value:
162
162
162
Value:
Value:
Почему последовательный модуль показывает такое поведение?
Первоначально машина, которую я использовал для считывания серийных значений, была платой Raspberry Pi под управлением Raspian Linux. Я думал, что проблема может быть связана с тем, что RPi переводит USB в спящий режим с низким энергопотреблением, когда он сталкивался с периодом простоя. Но я протестировал тот же код на своем ноутбуке, и там возникла та же проблема, подразумевая, что это может быть какая-то другая проблема.
Я хотел создать систему, которая должна работать круглосуточно и без выходных и считывать последовательные значения при возникновении определенных событий, поэтому такое поведение неприемлемо.
Пожалуйста, пролейте свет на этот вопрос.
time.sleep(30)
в конце? - person Aryaveer   schedule 02.10.2013ser.inWaiting()
в цикле и посмотрите, что он возвращает в этом случае. - person Aryaveer   schedule 02.10.2013