3.3 LEDs schalten
Jetzt möchten wir die LED ein- und ausschalten können.
Die Hardware- und Elektronikgrundlagen
Wir benötigen für unsere nächsten Anwendungen:
-
Widerstand (220 Ohm)
-
LED (rot)
-
Taster
Basis-Wissen Unterschied Taster und Schalter
Ein Taster schließt den Stromkreis nur, solange er gedrückt wird, und kehrt nach Loslassen in seine Ausgangsposition zurück, wie bei einer Türklingel oder Tastaturtasten. Ein Schalter hingegen bleibt in der gewählten Position (ein/aus), bis er erneut betätigt wird, und schaltet den Stromkreis dauerhaft ein oder aus, wie bei einem einfachen Lichtschalter.
Die Einbauposition des Tasters ist sehr wichtig. Man muss von vorne auf die beiden Anschlüsse schauen können!
Die Anwendungen
Wir haben zwei Anwendungen, aber in unterschiedlichen "Qualitätsstufen". Zunächst soll die LED angehen, wenn der Taster gedrückt ist und ausgehen, wenn der Taster nicht mehr gedrückt ist. Anschließend wollen wir den Taster über die Programmierung als Schalter verwenden: einmal drücken = an und erneut drücken = aus.
Eine rote LED mit einem Taster steuern - 1
-
Pin 38 an Masse
-
Pin 36 an Plus
-
Pin 21 (= GPIO 16) an den Widerstand
-
Widerstand an Plus der LED
-
Minus der LED an Masse
-
Pin 20 (GPIO 15) an den Taster
-
Andere Seite des Tasters an Plus
Wenn der Taster gedrückt wird, dann bekommt den Wert taster.value()=1
und in der if-Bedingung steht dann 1=1
, was True
ist.
Script verstehen
Bauen Sie das Script so um, dass der Taster die LED aus"tastet".
Eine rote LED mit einem Taster steuern - 2
Der Aufbau bleibt gleich und wir ändern lediglich das Script. Aber wir wollen uns eine weitere Lösung ansehen, die didaktisch interessant ist. Dazu wiederholen wir noch mal folgendes led.value(1) = led.high() = led.on()
und led.value(0) = led.low() = led.off()
.
Hier ist die Logik interessant. Wir haben also wieder eine While-Schleife, die als Endlosschleife funktioniert.
-
taster.value() = 0, wenn nicht gedrückt => Dann steht da: led.value(0), wenn wir den Wert 0 von taster.value() einsetzen!
-
taster.value() = 1, wenn gedrückt => Dann steht da: led.value(1), wenn wir den Wert 1 von taster.value() einsetzen!
So wird gerne programmiert und es "sieht schlimm aus, ist es aber nicht".
Den Taster als Schalter verwenden - Zustand speichern
Der Aufbau bleibt gleich und wir ändern lediglich das Script. Beim einmaligen drücken des Tasters soll die LED angeschaltet werden und beim erneuten Drücken ausgeschaltet werden.
Hier lernen wir zunächst einen wichtigen "Trick" der Programmierung kennen!
Mit diesem Script können wir also den Status bei jedem Tastendruck ändern.
Manchmal funktioniert es und manchmal nicht. Das Problem ist der Taster, da die mechanischen Kontakte mehrfach auslösen können. Dies nennt man "prellen". Wir verwenden einen einfachen Workarround, denn das Prellen entsteht beim Tasten in einem Zeitraum von wenigen Millisekunden. Also bauen wir eine kleine zeitliche Verzögerung ein.
Den Taster als Schalter verwenden - mit Prellschutz
Der Aufbau bleibt gleich und wir ändern lediglich das Script.
Der Operator not
ist für das Wechseln des Status sehr wichtig!
Den Taster als Schalter verwenden - LEDs schalten
Das Script für das Ein- und Ausschalten der LED sieht damit wie folgt aus:
Wenn man zu lange drückt, dann fängt die LED an zu blinken. Logisch, oder? Soll dies nicht vorkommen, so fügen wir noch eine while-Schleife hinzu, die einfach nur wartet, bis man die Taster losgelassen hat.
Scripte sind didaktische Beispiele!
Dieses Script (wie auch alle anderen bisher gezeigten Scripte) eignet sich nicht für den produktiven Einsatz in irgendwelchen kritischen Systemen. Der hier vorgenommene Prellschutz ist "viel zu einfach gedacht", aber didaktisch leicht vermittelbar und eine Lösung für unsere einfachen Anwendungen.
Python
Wir müssen nachsehen, was taster = Pin(15, Pin.IN, Pin.PULL_DOWN)
macht. Die Dokumentation gibt es hier: https://docs.micropython.org/en/latest/.
Aufgabe
Erstellen sie ein Script für eine Fußgängerampel. WICHTIG: vor der Programmierung überlegen sie sich die Logik, die sie programmieren möchten und dann gehen sie in kleinen Schritten vor!