def __init__(self, logger): LoggableClass.__init__(self, logger=logger) self.door_state = DOOR_NOT_MOVING self.shutdown = False self._needs_update = True self.last_input = time.time() self.condition = Condition() self.tft_state = True self.light_state_indoor = False self.light_state_outdoor = False self.slots = { (250, 40, 310, 85): self.doorUp, (250, 105, 310, 165): self.doorStop, (250, 185, 310, 230): self.doorDown, (0, 150, 115, 240): self.switchOutdoorLight, (116, 150, 230, 240): self.switchIndoorLight, (0, 50, 230, 100): self.switchDoorAutomatic, } self.setState({}) GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) self.tft = lib_tft24t.TFT24T(spidev.SpiDev(), GPIO, landscape=True) self.tft.initLCD(self.DC, self.RST, self.LED, switch_on=self.tft_state) self.tft.initTOUCH(self.TOUCH_IRQ) # TOUCH_IRQ = Pen! GPIO.add_event_detect(self.TOUCH_IRQ, GPIO.BOTH, callback=self.onTouchEvent, bouncetime=250) InstallStateChangeHandler(self, self.onStateChanged, self.shouldShutdown)
def SetInitialGPIOState(): """ Setzt den initialen GPIO-Status für die Tests. """ if not hasattr(GPIO, 'allow_write'): raise RuntimeError("Need GPIO dummy for setting initial board state!") with GPIO.write_context(): GPIO.setmode(GPIO.BOARD) GPIO.output(REED_UPPER, REED_OPENED) GPIO.output(REED_LOWER, REED_CLOSED) # Tür geschlossen GPIO.output(SHUTDOWN_BUTTON, 1)
import trio from gpio import GPIO GPIO.setmode(GPIO.BOARD) # 15 RED # 16 GREEN # 36 BLUE GPIO.setup(15, GPIO.OUT) GPIO.setup(16, GPIO.OUT) GPIO.setup(36, GPIO.OUT) p1 = GPIO.PWM(15, 500) # channel=12 frequency=50Hz p2 = GPIO.PWM(16, 500) # channel=12 frequency=50Hz p3 = GPIO.PWM(36, 500) # channel=12 frequency=50Hz async def breathe(r, g, b): p1.start(0) p2.start(0) p3.start(0) print("starting breathing ...") while True: for dc in range(0, 101, 2): p1.ChangeDutyCycle(dc * r) p2.ChangeDutyCycle(dc * g) p3.ChangeDutyCycle(dc * b) await trio.sleep(0.04) for dc in range(100, -1, -2):
def __init__(self): LoggableClass.__init__(self, name = "Board") #: Aktueller Zustand der Tür. #: Kann einen der folgenden Werte annehmen: #: #: - :data:`config.DOOR_NOT_MOVING`: Quasi ein unbekannter Zustand, da die #: Tür im Stillstand entweder geschlossen oder offen sein sollte. #: - :data:`config.DOOR_MOVING_UP`: Tür bewegt sich nach oben #: - :data:`config.DOOR_MOVING_DOWN`: Tür bewegt sich nach unten #: - :data:`config.DOOR_OPEN`: Tür ist offen #: - :data:`config.DOOR_CLOSED`: Tür ist geschlossen #: #: Zur Abfrage, ob sich die Tür bewegt, existiert ausserdem noch die Konstante #: :data:`config.DOOR_MOVING`, die als ODER-Ergebnis aus :data:`config.DOOR_MOVING_DOWN` #: und :data:`config.DOOR_MOVING_UP` zur Maskierung des Bewegungszustands #: verwendet werden kann: #: #: .. code-block:: python #: #: door_is_moving = bool(door_state & DOOR_MOVING) self.door_state = DOOR_NOT_MOVING #: Zustand der Innenbeleuchtung (``True`` = an) #: #: .. seealso:: #: :meth:`SwitchIndoorLight` #: :attr:`light_state_indoor` self.light_state_indoor = False #: Zustand der Außenbeleuchtung (``True`` = an) #: #: .. seealso:: #: :meth:`SwitchOutdoorLight` #: :attr:`light_state_indoor` self.light_state_outdoor = False #: Zeitpunkt, an dem der Shutdown-Button gedrückt wurde. #: Wird in :meth:`OnShutdownButtonPressed` benutzt um zu ermitteln, wie lange der Knopf #: gedrückt wurde (und Fehlsignalisierung auszuschließen) self.shutdown_btn_time = 0 #: Referenz auf ein Callable, welches bei Änderung des Board-Status #: gerufen wird. #: #: .. seealso:: #: :meth:`CallStateChangeHandler` #: :meth:`SetStateChangeHandler` self.state_change_handler = None #: Pfad der Datei, in der der Status gespeichert wird. #: #: .. seealso:: #: :meth:`Load` #: :meth:`Save` self.state_file = resource_path.joinpath(BOARDFILE) GPIO.setmode(GPIO.BOARD) self.logger.debug("Settings pins %s to OUT.", OUTPUT_PINS) GPIO.setup(OUTPUT_PINS, GPIO.OUT, initial = RELAIS_OFF) self.logger.debug("Settings pins %s to IN.", INPUT_PINS) GPIO.setup(INPUT_PINS, GPIO.IN) GPIO.add_event_detect( SHUTDOWN_BUTTON, GPIO.BOTH, self.OnShutdownButtonPressed, bouncetime = 200) #: Instanz von :class:`Sensors` zum Auslesen der Temperatur #: und Helligkeitswerte. self.sensor = Sensors() self.CheckInitialState()