10Alarmanlage
Ziel dieses Kapitels ist es, eine Alarmanlage für ein Fenster bzw. eine Tür zu entwickeln. Wir verwenden dazu die Schaltung aus dem vorletzten Kapitel. Wenn du keinen Magnetkontaktschalter hast, kannst du auch einen zweiten Taster benutzen. Der Magnetkontaktschalter funktioniert nämlich wie ein Taster.
Kopiere jetzt das folgende Programm in die Datei button2.py und speichere sie ab.
1import board
2import digitalio
3from adafruit_debouncer import Debouncer
4
5led_red = digitalio.DigitalInOut(board.D10)
6led_green = digitalio.DigitalInOut(board.D11)
7led_blue = digitalio.DigitalInOut(board.D12)
8led_red.direction = digitalio.Direction.OUTPUT
9led_green.direction = digitalio.Direction.OUTPUT
10led_blue.direction = digitalio.Direction.OUTPUT
11
12button = digitalio.DigitalInOut(board.D13)
13button.switch_to_input(pull=digitalio.Pull.DOWN)
14button_d = Debouncer(button)
15door = digitalio.DigitalInOut(board.D9)
16door.switch_to_input(pull=digitalio.Pull.UP)
17
18while True:
19 button_d.update()
20
21 if button_d.rose:
22 led_green.value = not led_green.value
23
24 led_red.value = door.value
25
Vergleiche zuerst die beiden Programme button1.py und button2.py. Welche Unterschiede und Gemeinsamkeiten gibt es?
Hast du bemerkt, dass grüne LED bei Programm button1 nur so lange leuchtet, wie der jeweilige Taster gedrückt wird. Im Programm button2 ist etwas anders. Wir können jetzt den Taster als Schalter verwenden und die LED durch den Taster ein- und ausschalten.
Toggeln einer LED
Mit dem Befehl led_red.value = not led_red.value
kann man den Zustand der LED toggeln - also umkehren. Dadurch wechselt die LED ihren Zustand von an nach aus oder umgekehrt.
Die Debouncer-Klasse
Wenn man einen Taster verwendet, erwartet man je nach Anwendung, dass sich etwas tut …
im Moment des Herunterdrückens oder
im Moment des Loslassens oder
solange man ihn drückt bzw. nicht drückt.
Den letzten Fall kennst du schon - er ist einfach zu programmieren. Wir nutzen dazu einfach das Attribut value
. Ist der Taster heruntergedrückt, dann ist value
gleich True
. Wenn value
aber True
ist, na dann ist auch die if-Bedingung True
. Und wenn die if-Bedingung True
ist, dann soll ein Text ausgegeben werden. Andernfalls (der Taster ist nicht gedrückt) passiert gar nichts, weil value
False
ist und damit ist auch die if-Bedingung False
.
if button.value:
print('pressed')
Soll die grüne LED ihren Zustand ändern, wenn der Taster runtergedrückt wird, kommen wir nicht drumherum ein neues Modul zu importieren. Das Modul heißt adafruit_debouncer
und es stellt eine Klasse Debouncer
bereit. Diese Klasse hat zwei sehr nützliche Attribute: fell
und rose
.
Betrachte das folgende Beispiel.
1import board
2import digitalio
3from adafruit_debouncer import Debouncer
4
5button = digitalio.DigitalInOut(board.D13)
6button.switch_to_input(pull=digitalio.Pull.DOWN)
7button_d = Debouncer(button)
8
9while True:
10 button_d.update()
11
12 if button_d.rose: # Wurde der Taster heruntergedrückt
13 print("Spannung ging von 0 auf 3.3V")
14
15 if button_d.fell: # Wurde der Tester losgelassen
16 print("Spannung ging von 3.3V auf 0V")
17
In dem Moment, als der Taster gedrückt wurde, stieg (engl.: rose
) das Potential am Pin D13
von 0V auf 3.3V an. Und in dem Moment, als der Taster losgelassen wurde, fiel (engl.: fell
) das Potential am Pin D13
von 3.3V auf 0V ab.