0

I`m writing simple script for my home security system. it consist of button, led, buzzer, and sensor. It works like this: - button pressed, - alarm function on, - it detects me ( everything is fine), - button pressed again, - alarm off(still fine) - button pressed again - and heres the problem: when a wave if front of the alarm when it was off, it still catches the movement, keeps this signal somehow, and the first thing after - alarm on is spotted signal, even if sensor didnt sent signal.

Hope i explain it clear enough. Here's the code:

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()
  • Is it possible that your sensor simply detects a state that makes it return True, the moment the alarm is switched on again? Is it a sensor that has a memory like a latch and needs a signal to revert back to its original state? – Oliver W. Jan 18 '15 at 03:14
  • yee, in fact now i started to belive that the python code is fine, and the micro vibrations when i push the on-switch were the problem.. – Artur Tomczyk Jan 19 '15 at 06:50

0 Answers0