Springe zum Inhalt oder Footer
SerloDie freie Lernplattform

Kurse

Grundlagen 2

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.

Bild

Kopiere jetzt das folgende Programm in die Datei button2.py und speichere sie ab.

Bild
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.


Dieses Werk steht unter der freien Lizenz
CC BY-SA 4.0Was bedeutet das?