Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python if loop time.sleep仅执行一次_Python - Fatal编程技术网

Python if loop time.sleep仅执行一次

Python if loop time.sleep仅执行一次,python,Python,下面的代码是用Python编写的PIR传感器代码 它应该做什么 当传感器第一次被激活时,它应该等待10秒钟一次,然后继续打印检测到的入侵者,直到传感器=0 他们实际上在做什么 当pir传感器为跳跳虎时,下面的代码不是等待10秒一次,而是等待10秒一次 为什么呢 import RPi.GPIO as GPIO import time GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(11, GPIO.IN) #R

下面的代码是用Python编写的PIR传感器代码

它应该做什么

当传感器第一次被激活时,它应该等待10秒钟一次,然后继续打印检测到的入侵者,直到传感器=0

他们实际上在做什么

当pir传感器为跳跳虎时,下面的代码不是等待10秒一次,而是等待10秒一次

为什么呢

import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.IN)         #Read output from PIR motion sensor
GPIO.setup(3, GPIO.OUT)         #LED output pin
while True:
       i=GPIO.input(11)
       if i==0:                 #When output from motion sensor is LOW
             print "No intruders",i
             GPIO.output(3, 0)  #Turn OFF LED
             time.sleep(0.1)
       elif i==1:               #When output from motion sensor is HIGH
             time.sleep(10)     #This should be only run once when the pir sensor is trigger
             print "Intruder detected",i
             GPIO.output(3, 1)  #Turn ON LED
             time.sleep(0.1)

只要记住如果是Triggerrd:

import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.IN)         # Read output from PIR motion sensor
GPIO.setup(3, GPIO.OUT)         # LED output pin
wasTriggered = False            # not yet triggered
while True:
       i=GPIO.input(11)
       if i == 0:                          # When output from motion sensor is LOW
             print "No intruders",i
             wasTriggered = False          # reset trigger if True else does nothing
             GPIO.output(3, 0)             # Turn OFF LED
             time.sleep(0.1)
       elif i == 1:                        # When output from motion sensor is HIGH
             if wasTriggered == False:     # already triggered ?
                 time.sleep(10)            # only run once when the pir sensor is trigger
                 print "Intruder detected",i
                 GPIO.output(3, 1)         # Turn ON LED
                 wasTriggered = True       # set was triggered 
             time.sleep(0.1)

这将创建一个内存-只有当传感器报告针脚11上有一个0时,它才会重置。您可能希望切换Led变为红色+输出文本,并四处休眠以使其更加快速-这意味着它将立即对传感器的变化作出反应,然后暂停10秒而不是暂停10秒,然后切换灯光和打印文本,这将断开Act->react序列。

您确定GPIO.input11会返回到零也许在检查if之前打印一个i。问题很简单,甚至很愚蠢,但问题的格式很好。它通过一个代码片段清楚地显示了预期的行为和当前的行为。我不认为它应该被否决。我正试图在警报触发前有10秒的延迟。所以,切换led+输出文本和四处睡眠将不起作用。@但是如果你有一个这样的用例-好的,从守卫监视入侵者的角度来看,这似乎是个坏主意;-我并没有改变事情的方向,所以答案应该是你们想要的