您好我有一点问题。
与Raspberry Pi做了一个小项目。
关于项目:有一个开关连接到门,当门打开时按下开关,Raspberry Pi将日期和时间写入文件,但如果门仍然打开则每2秒执行一次。我想出了如何改变那个时间,但是如果我把更长的睡眠时间放在那里,如果门关闭但睡眠时间没有过去,门可以再次打开而且不会被写入文件。
这是我的代码。
我有两个LED连接,看门何时关闭和打开。
#!/usr/bin/env python
import time
import RPi.GPIO as GPIO
def main():
GPIO.setmode(GPIO.BCM)
GPIO.setup(23,GPIO.IN)
GPIO.setup(24,GPIO.OUT)
GPIO.setup(25,GPIO.OUT)
GPIO.output(25,True)
while True:
if GPIO.input(23):
GPIO.output(24,True)
GPIO.output(25,False)
f = open('register','a')
t = time.strftime("%Y.%m.%d. - %H:%M:%S")
f.write('Doors opened ')
f.write(t)
f.write('\n')
f.close()
else:
GPIO.output(24,False)
GPIO.output(25,True)
print "button false"
time.sleep(0.1)
GPIO.cleanup()
if __name__=="__main__":
main()
基本上,如果电路关闭或不关闭,代码会每秒检查一次。如果没有,它会每隔一个新文本文件写入日期和时间,如果没有继续检查。 我需要的是写入门打开时的文件日期和时间,然后等待关门。
答案 0 :(得分:0)
您应记录从门开关读取的最后一个值,并仅记录当前值是否与上一个值不同。
last_value = None #Set to None so it will always be different the first time.
while True:
current_value = GPIO.input(23)
if current_value != last_value:
if current_value:
GPIO.output(24,True)
GPIO.output(25,False)
#LOG STUFF
else:
GPIO.output(24,False)
GPIO.output(25,True)
print "button false"
last_value = current_value
time.sleep(0.1)
答案 1 :(得分:-1)
import RPi.gpio as gpio
import time
open_door_pin = 23
red_light_pin = 24
green_light_pin = 25
gpio.setmode(gpio.bcm)
gpio.setup(open_door_pin, gpio.IN)
gpio.setup(red_light_pin, gpio.OUT)
gpio.setup(green_light_pin, gpio.OUT)
gpio.output(red_light_pin, False)
gpio.output(green_light_pin, True)
f = open('register','a')
while True:
gpio.wait_for_edge(open_door_pin,gpio.BOTH)
if gpio.input(open_door_pin):
gpio.output(red_light_pin, True)
gpio.output(green_light_pin, False)
t = time.strftime("%Y.%m.%d. - %H:%M:%S")
f.write('Doors opened ')
f.write(t)
f.write('\n')
else:
gpio.output(red_light_pin, False)
gpio.output(green_light_pin, True)
t = time.strftime("%Y.%m.%d. - %H:%M:%S")
f.write('Doors closed ')
f.write(t)
f.write('\n')
f.close()
gpio.cleanup()