|
@@ -0,0 +1,156 @@
|
|
|
+import time
|
|
|
+import Adafruit_BBIO.GPIO as GPIO
|
|
|
+import Adafruit_BBIO.PWM as PWM
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+class IR:
|
|
|
+ _name = ""
|
|
|
+ _pin = ""
|
|
|
+ _mode = GPIO.IN
|
|
|
+ _rot = None
|
|
|
+ _laut = None
|
|
|
+ def __init__(self, name, pin, rot, laut):
|
|
|
+ self._name = name
|
|
|
+ self._pin = pin
|
|
|
+ self._rot = rot
|
|
|
+ self._laut = laut
|
|
|
+ GPIO.setup(self._pin, self._mode)
|
|
|
+ GPIO.add_event_detect(self._pin, GPIO.RISING, callback=self.cb_ir)
|
|
|
+
|
|
|
+ def __del__(self):
|
|
|
+ print("IR {} deleted.".format(self._name))
|
|
|
+ GPIO.remove_event_detect(self._pin)
|
|
|
+
|
|
|
+ def cb_ir(self, pin):
|
|
|
+ print("cb_ir called")
|
|
|
+ for i in range(self._laut._duration * self._rot._blink_freq):
|
|
|
+ self._laut.start()
|
|
|
+ self._rot.start()
|
|
|
+ time.sleep(1/self._rot._blink_freq)
|
|
|
+ self._rot.stop()
|
|
|
+ self._laut.stop()
|
|
|
+
|
|
|
+class PIR:
|
|
|
+ _name = ""
|
|
|
+ _pin = ""
|
|
|
+ _mode = GPIO.IN
|
|
|
+ _rot = None
|
|
|
+ _laut = None
|
|
|
+ def __init__(self, name, pin, rot, laut):
|
|
|
+ self._name = name
|
|
|
+ self._pin = pin
|
|
|
+ self._rot = rot
|
|
|
+ self._laut = laut
|
|
|
+ GPIO.setup(self._pin, self._mode)
|
|
|
+ GPIO.add_event_detect(self._pin, GPIO.RISING, callback=self.cb_pir)
|
|
|
+
|
|
|
+ def __del__(self):
|
|
|
+ print("PIR {} deleted.".format(self._name))
|
|
|
+ GPIO.remove_event_detect(self._pin)
|
|
|
+
|
|
|
+ def cb_pir(self, pin):
|
|
|
+ print("cb_pir called")
|
|
|
+ for i in range(self._laut._duration * self._rot._blink_freq):
|
|
|
+ self._laut.start()
|
|
|
+ self._rot.start()
|
|
|
+ time.sleep(1/self._rot._blink_freq)
|
|
|
+ self._rot.stop()
|
|
|
+ self._laut.stop()
|
|
|
+
|
|
|
+class MAG:
|
|
|
+ _name = ""
|
|
|
+ _pin = ""
|
|
|
+ _mode = GPIO.IN
|
|
|
+ _window_closed = True
|
|
|
+ _rot = None
|
|
|
+ _laut = None
|
|
|
+ def __init__(self, name, pin, rot, laut):
|
|
|
+ self._name = name
|
|
|
+ self._pin = pin
|
|
|
+ self._rot = rot
|
|
|
+ self._laut = laut
|
|
|
+ GPIO.setup(self._pin, self._mode)
|
|
|
+ GPIO.add_event_detect(self._pin, GPIO.BOTH, callback=self.cb_mag)
|
|
|
+
|
|
|
+ def __del__(self):
|
|
|
+ print("MAG {} deleted.".format(self._name))
|
|
|
+ GPIO.remove_event_detect(self._pin)
|
|
|
+
|
|
|
+ def cb_mag(self, pin):
|
|
|
+ if self._window_closed:
|
|
|
+ print("Fenster geoeffnet...")
|
|
|
+ self._window_closed = False
|
|
|
+ for i in range(self._laut._duration * self._rot._blink_freq):
|
|
|
+ self._laut.start()
|
|
|
+ self._rot.start()
|
|
|
+ time.sleep(1/self._rot._blink_freq)
|
|
|
+ self._rot.stop()
|
|
|
+ self._laut.stop()
|
|
|
+ else:
|
|
|
+ print("Fenster zu...")
|
|
|
+ self._window_closed = True
|
|
|
+
|
|
|
+class ROT:
|
|
|
+ _name = ""
|
|
|
+ _pin = ""
|
|
|
+ _mode = GPIO.OUT
|
|
|
+ _blink_freq = 2
|
|
|
+ def __init__(self, name, pin, blink_freq=2):
|
|
|
+ self._name = name
|
|
|
+ self._pin = pin
|
|
|
+ self._blink_freq = blink_freq
|
|
|
+ GPIO.setup(self._pin, self._mode)
|
|
|
+
|
|
|
+ def __del__(self):
|
|
|
+ print("ROT {} deleted.".format(self._name))
|
|
|
+
|
|
|
+ def start(self):
|
|
|
+ GPIO.output(self._pin, GPIO.HIGH)
|
|
|
+
|
|
|
+ def stop(self):
|
|
|
+ GPIO.output(self._pin, GPIO.LOW)
|
|
|
+
|
|
|
+class LAUT:
|
|
|
+ _name = ""
|
|
|
+ _pin = ""
|
|
|
+ _mode = GPIO.OUT
|
|
|
+ _duration = 60 # in second
|
|
|
+ _pwm_perc = 50 # in percentage
|
|
|
+ _pwm_freq = 10000 # in hz
|
|
|
+ def __init__(self, name, pin, duration=60, pwm_perc=50, pwm_freq=10000):
|
|
|
+ self._name = name
|
|
|
+ self._pin = pin
|
|
|
+ self._duration = duration
|
|
|
+ self._pwm_perc = pwm_perc
|
|
|
+ self._pwn_freq = pwm_freq
|
|
|
+ GPIO.setup(self._pin, self._mode)
|
|
|
+
|
|
|
+ def __del__(self):
|
|
|
+ print("PWM {} deleted.".format(self._name))
|
|
|
+
|
|
|
+ def start(self):
|
|
|
+ PWM.start(self._pin, self._pwm_perc, self._pwm_freq)
|
|
|
+
|
|
|
+ def stop(self):
|
|
|
+ PWM.stop(self._pin)
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ try:
|
|
|
+ print("Program start. Initializing with alarm config...")
|
|
|
+ rot = ROT("outPinROT", "P9_27")
|
|
|
+ laut = LAUT("myPWMLAUT", "P8_13", duration=4)
|
|
|
+ ir = IR("inPinIR", "P9_12", rot, laut)
|
|
|
+ pir = PIR("inPinPIR", "P9_41", rot, laut)
|
|
|
+ mag = MAG("inPinMAG", "P8_7", rot, laut)
|
|
|
+
|
|
|
+ print("Initialization succeeded. Start in 2 seconds.")
|
|
|
+ time.sleep(2)
|
|
|
+ while True:
|
|
|
+ print("...")
|
|
|
+ time.sleep(2)
|
|
|
+ except Exception as e:
|
|
|
+ print("Exception captured. Clean up and quit...")
|
|
|
+ GPIO.cleanup()
|
|
|
+ PWM.cleanup()
|
|
|
+ print(e)
|