-1

你好我有一个小问题。用树莓派做了一个小项目。
关于项目:有一个开关连接到门,当门打开时按下开关,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()

基本上,代码每秒检查一次电路是否闭合。如果不是,它会每隔一秒写入一个带有日期和时间的新文本文件,如果不是,则继续检查。我需要的是在文件中写入开门的日期和时间,然后等待关门。

4

2 回答 2

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)
于 2013-09-16T22:25:53.543 回答
-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()
于 2014-12-09T03:49:29.693 回答