浏览代码

Dateien hochladen nach ''

Yang Zhang 5 年之前
父节点
当前提交
18228bd66b
共有 1 个文件被更改,包括 138 次插入0 次删除
  1. 138 0
      lautalarm_multiprocessing(with_bug).py

+ 138 - 0
lautalarm_multiprocessing(with_bug).py

@@ -0,0 +1,138 @@
+import time
+import multiprocessing
+import Adafruit_BBIO.GPIO as GPIO
+import Adafruit_BBIO.PWM as PWM
+
+class Lautalarm:
+    def __init__(self, laut_pin, rot_pin, duration=60, refresh_intvl=1):
+        self.triggered = False
+        self.activited = False
+        self.duration = duration
+        self.laut_pin = laut_pin
+        self.rot_pin = rot_pin
+        self.refresh_intvl = refresh_intvl
+
+    def __del__(self):
+        print("Lautalarm deleted.")
+
+    def run(self):
+        while True:
+            if not self.triggered:
+                print("...")
+            else:
+                #  start laut, start rot, start timer
+                if not self.activited:
+                    laut = LAUT(pin=self.laut_pin, lautalarm=self)
+                    rot = ROT(pin=self.rot_pin, lautalarm=self)
+                    laut.start()
+                    rot.start()
+                    ttimer = Termtimer(timeout=self.duration, lautalarm=self)
+                    ttimer.start()
+                    self.activited = True
+                print("+++")
+            time.sleep(self.refresh_intvl)
+
+class IR:
+    def __init__(self, pin, lautalarm):
+        self.pin = pin
+        self.lautalarm = lautalarm
+        GPIO.setup(self.pin, GPIO.IN)
+        GPIO.add_event_detect(self.pin, GPIO.RISING, callback=self.cb_ir)
+
+    def __del__(self):
+        print("IR {} deleted.".format(self.pin))
+        GPIO.remove_event_detect(self.pin)
+
+    def cb_ir(self, pin):
+        print("cb_ir called")
+        self.lautalarm.triggered = True
+
+class PIR:
+    def __init__(self, pin, lautalarm):
+        self.pin = pin
+        self.lautalarm = lautalarm
+        GPIO.setup(self.pin, GPIO.IN)
+        GPIO.add_event_detect(self.pin, GPIO.RISING, callback=self.cb_pir)
+
+    def __del__(self):
+        print("PIR {} deleted.".format(self.pin))
+        GPIO.remove_event_detect(self.pin)
+
+    def cb_pir(self, pin):
+        print("cb_pir called")
+        self.lautalarm.triggered = True
+
+class Termtimer(multiprocessing.Process):
+    def __init__(self, timeout, lautalarm):
+        super().__init__()
+        self.timeout = timeout
+        self.lautalarm = lautalarm
+
+    def __del__(self):
+        print("Termtimer deleted.")
+
+    def run(self):
+        time.sleep(self.timeout)
+        self.lautalarm.triggered = False
+        self.lautalarm.activited = False
+
+class ROT(multiprocessing.Process):
+    def __init__(self, pin, lautalarm, blink_freq=2):
+        super().__init__()
+        self.pin = pin
+        self.blink_freq = blink_freq
+        self.blink_intvl = 1 / blink_freq
+        GPIO.setup(self.pin, GPIO.OUT)
+        self.lautalarm = lautalarm
+
+    def __del__(self):
+        print("ROT {} deleted.".format(self.pin))
+
+    def rot_start(self):
+        GPIO.output(self.pin, GPIO.HIGH)
+
+    def rot_stop(self):
+        GPIO.output(self.pin, GPIO.LOW)
+
+    def run(self):
+        while True:
+            if not self.lautalarm.activited:
+                return
+            self.rot_start()
+            time.sleep(self.blink_intvl)
+            self.rot_stop()
+
+class LAUT(multiprocessing.Process):
+    def __init__(self, pin, lautalarm, laut_freq=1, pwm_perc=50, pwm_freq=10000):
+        super().__init__()
+        self.pin = pin
+        self.laut_freq = laut_freq
+        self.laut_intvl = 1 / laut_freq
+        self.pwm_perc = pwm_perc
+        self.pwm_freq = pwm_freq
+        GPIO.setup(self.pin, GPIO.OUT)
+        self.lautalarm = lautalarm
+
+    def __del__(self):
+        print("LAUT {} deleted.".format(self.pin))
+
+    def laut_start(self):
+        PWM.start(self.pin, self.pwm_perc, self.pwm_freq)
+
+    def laut_stop(self):
+        PWM.stop(self.pin)
+
+    def run(self):
+        while True:
+            if not self.lautalarm.activited:
+                return
+            self.laut_start()
+            time.sleep(self.laut_intvl)
+            self.laut_stop()
+
+if __name__ == "__main__":
+    myalarm = Lautalarm(laut_pin="P8_13", rot_pin="P9_27", duration=10)
+    ir = IR("P9_12", myalarm)
+    pir = PIR("P9_41", myalarm)
+    # mag = MAG("P8_7", myalarm)
+    myalarm.run()