Имам платка 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
Започвам да получавам проблеми. Първият набор от стойности се отпечатва. От този момент нататък ser.readline() винаги изтича, давайки нулеви стойности!
Изход:
Value:
162
162
162
Value:
Value:
Защо серийният модул показва това поведение?
Първоначално машината, която използвах за четене на серийните стойности, беше платка Raspberry Pi, работеща с Raspian linux. Мислех, че проблемът може да се дължи на това, че RPi превключва USB в режим на заспиване с ниска мощност, когато се натъкне на период на неактивност. Но тествах същия код на лаптопа си, след което имаше същия проблем, което предполага, че може да е друг проблем.
Исках да създам система, която трябва да работи 24x7 и да чете серийни стойности при определени събития, така че това поведение не е приемливо.
Моля, хвърлете малко светлина по този въпрос.
time.sleep(30)
в края? - person Aryaveer   schedule 02.10.2013ser.inWaiting()
оператор в цикъл и вижте какво връща в този случай. - person Aryaveer   schedule 02.10.2013