В то время как цикл не работает сразу при считывании с датчика без печати показаний с датчика? - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь прочитать несколько отражающих ИК-датчиков непрерывно, пока каждый из них не будет заблокирован. Я использую Arduino под управлением стандартной библиотеки Firmata и Pythons Pyfirmata.

Каждый раз, когда я пробую стандартное чтение без вывода результата в цикле while, я получаю задержку в 15-30 секунд (не могу понять, почему):

Example1 - работает, но со случайной необъяснимой задержкой:

Sensor1 = board.get_pin('a,0,i') #analogue, pin 0, input mode

while Sensor1.read() != 0: #Sensor defaults to 0.6 V but when blocked 0.0v

   Sensor1.read()

Example2 - работает, но теперь у меня есть несколько выходов для чтения с датчиков:

Sensor1 = board.get_pin('a,0,i') #analogue, pin 0, input mode

while Sensor1.read() != 0: #Sensor defaults to 0.6 V but when blocked 0.0v

   Sensor1.read()

   print(Sensor1.read()) # this prints a bunch of read outputs

Для некоторыхпричина, когда я добавляю печать (Sensor1.read ()), я получу немедленный ответ, когда датчик заблокирован. Но если я удаляю эту часть кода, чтобы устранить вывод мусора, я получаю необъяснимую задержку между тем, когда датчик блокируется и когда он распознается кодом и движется дальше. То, что я хотел бы сделать, это постоянно читать датчик без печати, который считывает и получает немедленную реакцию на разрыв цикла while, когда датчик заблокирован и выдает 0.0v. Я считаю, что у меня также есть возможность подавления вывода на печать для этих циклов while, но я хочу знать, есть ли альтернатива? Большое спасибо за просмотр этого вопроса и миллион за любую помощь!

1 Ответ

0 голосов
/ 23 октября 2019

read() не всегда может быть точным 0. Возможно, используйте пороговое значение, например:

while Sensor1.read() > 10:

Другим решением было бы использование прерываний и установка флагов, чтобы вам не приходилось опрашивать (и можно было бы перевести устройство в спящий режим).

...