树莓派运动传感器输入信号

时间:2015-01-16 07:20:36

标签: python raspberry-pi alarm motion

我正在为我的家庭安全系统编写简单的脚本。它由按钮,LED,蜂鸣器和传感器组成。它的工作原理如下: - 按下按钮, - 报警功能开启, - 它检测到我(一切正常), - 再次按下按钮, - 报警关闭(仍然正常) - 再次按下按钮 - 继续问题:当报警前面发出波形时它关闭了,它仍然捕捉到运动,保持这个信号不知何故,并且第一件事 - 警报开启后是发出信号,即使传感器没有发出信号。

希望我能够清楚地解释清楚。这是代码:

import RPi.GPIO as GPIO
import time
import os
from itertools import cycle
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(04, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)#switch
GPIO.setup(17, GPIO.OUT)#led
GPIO.setup(18, GPIO.OUT)#buzzer
GPIO.setup(21, GPIO.IN)#sensor


#### definicje funkcji #####
############################
############################

def led_on(czas):
    GPIO.output(17,1)
    time.sleep(czas)
    GPIO.output(17,0)
    return;
#led_on(10)

############################

def buzzer_on(czas):
    GPIO.output(18,1)
    time.sleep(czas)
    GPIO.output(18,0)
    return;
#buzzer_on(0.1)
############################
def alarm_on():
    print "alarm on"
    while True:
        if (GPIO.input(21)):
            print "spotted!"
            buzzer_on(0.1)
            led_on(0.1)
            time.sleep(1)
        if (GPIO.input(04) == 1):
            next(wlacznik)
            alarm_off();
            led_on(1)
            break
    return;

def alarm_off():
    print "alarm off"
    return;

############################

########################################### PROGRAM ###########################################
###############################################################################################
###############################################################################################

### WLACZNIK_ALARMU ######


wlacznik = cycle(range(2))
print "wartosc wlacznika:"
print next(wlacznik)
prev_input = 0   #toggle dla przycisku


while True:
  input = GPIO.input(04)
  #if the last reading was low and this one high, print
  if ((not prev_input) and input):
      print("Button pressed")
      if (next(wlacznik) == 1):
          led_on(0.1)
          time.sleep(0.1)
          led_on(0.1)
          time.sleep(1)
          alarm_on();
  #update previous input
  prev_input = input
  #slight pause to debounce
  time.sleep(0.05)

########################################### KONIEC ############################################
GPIO.cleanup()

0 个答案:

没有答案