Вот немного питона, который я заимствую. Его на малине pi контролируют три штыря с герконовыми выключателями на дверях. Если дверь открывается, она говорит «дверь открыта».Python while loop, пауза пока нет, продолжить снова, когда это правда?
Проблема в том, что она продолжает повторяться. Я хочу, чтобы он сказал это один раз, остановись, подождать, пока дверь не закроется и не возобновится мониторинг.
import time
import RPi.GPIO as io
import subprocess
io.setmode(io.BCM)
#pir_pin = 18
door_pin = 24
door_pin2 = 4
door_pin3 = 22
#io.setup(pir_pin, io.IN) # activate input
io.setup(door_pin, io.IN, pull_up_down=io.PUD_UP) # activate i$
io.setup(door_pin2, io.IN, pull_up_down=io.PUD_UP) # activate $
io.setup(door_pin3, io.IN, pull_up_down=io.PUD_UP) # activate $
while True:
# if io.input(pir_pin):
# print("PIR ALARM!")
if io.input(door_pin):
print("DOOR Open!")
if io.input(door_pin2):
print("DOOR Open2!")
if io.input(door_pin3):
print("DOOR open3!")
subprocess.call(['/usr/sipcmd-master/doording.sh'])
time.sleep(1.9)
Я пробовал нижние линии, но, видимо, я не могу использовать истинное условие в истинном состоянии?
Редактировать: может быть, упрощенная версия моего вопроса, как я могу заставить цикл ждать изменения перед продолжением. то есть ждать, пока шпилька = 0, сделать X, когда штырь = 1
Вы пропустили ':' на 'if True'. Кроме того, 'if True: continue' заставит цикл всегда пропускать вызов' time.sleep() '. Если вы хотите так часто проверять дверь, возьмите чек из своей петли, сделайте ее функцией, затем используйте [Cron] (https://www.raspberrypi.org/documentation/linux/usage/cron.md) запланировать проверку. Если вы хотите, чтобы что-то случалось каждый раз, когда дверь открывается или закрывается, привяжите обратный вызов к событию (не уверен, как это сделать в малине Pi). – TigerhawkT3
Исправлено: но он все еще не делает то, что я хочу. Я хочу, чтобы цикл подождал 'или' пауза ', пока дверь не будет закрыта, а затем возобновится. – wlraider70
Единственное, что 'time.sleep()' может приостанавливаться до тех пор, пока не будет указан определенный интервал времени. Кроме того, похоже, что вы не совсем поняли значение 'if True' или' continue'. 'if True' проверяет, проверяет ли' True' значение 'True', что всегда, так что ветвь всегда вводится. 'continue' немедленно возвращается, чтобы переоценить условие цикла, а не выполнять оставшуюся часть цикла. То, что вы ищете, - это привязка обратного вызова к событиям открытия и закрытия. – TigerhawkT3