-1

こんにちは、少し問題があります。Raspberry Pi で小さなプロジェクトを作成しました。
プロジェクトについて : ドアに接続されたスイッチがあり、ドアが開いているときにスイッチが押され、Raspberry Pi が日付と時刻をファイルに書き込みますが、ドアがまだ開いている場合は 2 秒ごとに書き込みます。その時間を変更する方法を見つけましたが、スリープ時間を長くすると、ドアが閉じていてもスリープ時間が経過していない場合、ドアを再び開くことができ、ファイルに書き込まれません。これが私のコードです。ドアの開閉を確認するために、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

-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 に答える