你能用小蟒蛇脚本来帮助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)
答案 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负载
脚本应该可以工作。