循环回到python脚本的顶部

时间:2018-05-16 10:33:45

标签: python raspberry-pi

你能用小蟒蛇脚本来帮助noobie吗?

编辑我的问题。因为下面的代码适用于它的目的。

现在我想要实现的是我还有第二个脚本。 (发布于下方)控制一个PIR传感器,它也可以打开灯。 但我想尝试将两个脚本合并为一个单独的脚本。

默认情况下应使用PIR传感器在检测到移动时打开灯。但!如果按下按钮,它应该覆盖传感器并保持灯亮15分钟。

正如我现在设立的那样,pir完成了它的工作。但如果它前面没有任何动作,我按下按钮就会打开灯然后再快速关闭,因为pir没有检测到任何动作。

以下两个脚本。非常感谢我能得到的所有帮助。 :)

import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(4, GPIO.IN)         #Read output from PIR motion sensor
while True:
   i=GPIO.input(4)
   if i==0:                 #When output from motion sensor is LOW
         print "No movement detected - Turning lights off",i
         exec(open("./LightsOff.py").read(), globals())
         time.sleep(0.1)
   elif i==1:               #When output from motion sensor is HIGH
         print "Movement detected - Turning lights on",i
         exec(open("./LightsOn.py").read(), globals())
         time.sleep(60 * 15)


import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)

while True:
input_state = GPIO.input(18)
if input_state == False:
    print('Button Pressed')
    execfile("LightsOn.py")
    time.sleep(0.2)

1 个答案:

答案 0 :(得分:0)

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
starttime = 0
while True:
    if GPIO.input(18) == False and starttime == 0:
        #waiting for release button
        while not GPIO.input(18):
            pass
        starttime = time.time()
        print('Turning on Kitchen Lights for 15 minutes')
        exec(open('LightsOn.py').read())
    if (time.time() - starttime) < (15*60) and starttime != 0 and GPIO.input(18) == False:
        #waiting for release button
        while not GPIO.input(18):
            pass
        exec(open('LightsOff.py').read())
        starttime=0           

    if (time.time() - starttime) > (15*60) and starttime != 0:
        exec(open('LightsOff.py').read())
        starttime=0

您可以使用time.time()函数进行计时。

你也可以在while循环结束时使用time.sleep(0.1)来减少cpu负载

脚本应该可以工作。