Цифровой вход PyFirmata получает None, работая хорошо на отладке
Я изучаю протокол pyFirmata с некоторыми примерами. В качестве упражнения я делаю систему датчиков PIR. Когда я запускаю код, pyFirmata всегда выводит значение None. Однако, если я делаю отладку в PyCharm, все работает так, как должно быть. На Arduino загружается эскиз StandardFirmata. Кто-нибудь знает, что является причиной этого поведения?
Код:
import pyfirmata
from time import sleep
def blinkled(pin, message):
print(message)
board.digital[pin].write(1)
sleep(1)
board.digital[pin].write(0)
sleep(1)
port = '/dev/cu.usbmodem1411'
board = pyfirmata.Arduino(port)
it = pyfirmata.util.Iterator(board)
it.start()
pirPin = board.get_pin('d:7:i')
redPin = 12
greenPin = 13
while True:
value = pirPin.read()
while value is None:
print("None")
sleep(1)
pass
if value is True:
blinkled(redPin, "Motion Detected.")
else:
blinkled(greenPin, "No Motion Detected.")
board.exit()
2 ответа
Хорошо, мы обнаружили, что выражение while должно быть заменено на if. Тогда все работает. Не понимаю это поведение.
- Почему программа застряла с "while" при получении None?
- Почему в режиме отладки все нормально?
Я буду признателен, если кто-нибудь может объяснить.
Код решил эту проблему:
if value is None:
print("None")
В дополнение к переключению на предложение if, как указал OP, следует использовать оператор continue для продолжения в верхней части цикла :
if value is None:
print("None")
continue
Это приведет к тому, что логика кода не будет проходить через дополнительные предложения после того, как она не пройдет первоначальный тест «Нет значения».