Когда я делал что-то похожее с Arduino, я использовал флаг.В этом случае я должен иметь эквивалент While True:
, потому что это основной процесс платы, и должен был работать в бесконечном цикле при включении питания.
Проблема, с которой вы столкнулисьИмея сейчас (я бы предположил), что каждый раз, когда цикл попадает в следующий код, вы создаете импульс:
mylcd.lcd_clear()
mylcd.lcd_display_string(...)
Любое простое (хотя и нелегкое) исправление для этого похоже на (это Python 3)., который работает немного иначе для итераций словаря, чем 2.7) это.У меня не было возможности проверить это (поэтому я, вероятно, пропустил некоторые вещи / сделал некоторые опечатки), но, надеюсь, вы поняли:
inputs = {"Input17": False,
"Input23": False,
"Input24": False}
while True:
change_in_input = False
# check for change in inputs
for input in inputs:
if bool(pi_GPIO.read(input)) != bool(inputs[input]):
change_in_input = True
# update inputs based on change(s)
inputs[input] = pi_GPIO.read(input)
if change_in_input:
if not any(inputs.values()):
pi_GPIO.write(18, 1)
mylcd.lcd_clear()
mylcd.lcd_display_string("Awaiting Input", 1)
mylcd.lcd_display_string("Detection", 2)
elif inputs["Input23"]:
pi_GPIO.write(18, 0)
mylcd.lcd_clear()
mylcd.lcd_display_string("Input 1 Active", 1)
time.sleep(Debounce)