Python time.sleep脚本

时间:2013-09-16 11:16:21

标签: python loops raspberry-pi

您好我有一点问题。 与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()

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

2 个答案:

答案 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()