#3 digital input / digital output

Digital input und Digital output sind wohl die am häufigsten verwendeten Methoden bei der Arbeit mit einem Arduino. Mit diesen Funktionen, einer LED und einem Taster lässt sich so schon ein einfacher Lichtschalter bauen.

Aufbau

Digital input / Digital output Schaltungsaufbau
Schaltungsaufbau (Anklicken zum vergrößern)

Teile

  • LED (Farbe egal)
  • Passender Vorwiderstand (hier 220Ω)
  • Einfacher Taster
  • Jumperkabel
  • Steckbrett
  • Arduino (hier UNO R3)

Vorhaben / Ziel

Mit dem Taster an einem digital input wollen wir die LED ein und wieder ausschalten können, ohne dass wir den Taster die ganze Zeit gedrückt halten müssen. Mit weiteren Tastern könnte so z.B. auch die Steuerung eines Treppenhaus-Lichts realisiert werden.

Der Code

Sieht ganz schon ganz schön kompliziert aus, oder? Mit dem ganzen if und else… Und was zum Teufel bedeutet dieses HIGH und LOW? Keine Panik, wir schauen uns das mal Schritt für Schritt an:

Pinbelegung in globalen Variablen speichern

Die ersten Zeilen sind sehr übersichtlich:

Hier werden 3 Variablen vom integer (also eine Zahl ohne Nachkommastellen) erstellt. Die stellen in unserem Programm die Einstellungen dar. In der Variable tasterPin der Pin, an dem der Taster angeschlossen ist hinterlegt (Pin 2). Genauso mit dem Pin der LED in ledPin. Das hat den Vorteil, dass wir die Pinbelegung nur hier ändern müssen, wenn wir mal die Verdrahtung ändern sollten. Zusätzlich setzen wir hier den Anfangsstatus der LED (in diesem Fall LOW). Mehr dazu gleich…

 

Setup() – digital input & digital output einstellen

Die Zeilen im Setup-Bereich kennen wir bereits aus Teil 2 dieser Serie. Mit pinMode() teilen wir dem Arduino mit, welche Pins Eingänge und welche Ausgänge sind. Der erste Wert in den Klammern zeigt an, welchen Pin wir belegen wollen. Der zweite Wert die Funktion des Pins. Dabei gibt es 3 mögliche Zustände:

  1. OUTPUT  => Dieser Pin wird als Ausgang (zum Steuern der LED) genutzt.
  2. INPUT => Dieser Pin wird als Eingang (für den Taster) genutzt.
  3. INPUT_PULLUP => siehe INPUT (+ PullUp-Widerstand)

Bei INPUT_PULLUP schaltet der Arduino intern einen kleinen Widerstand zwischen 5V (Pluspol) und dem Pin. Das sorgt dafür, dass an dem PIN immer 5V (also HIGH) anliegen, solange dieser nicht mit GND (Minuspol) verbunden ist. Das hilft uns später im eigentlich Programm.

In der letzten Zeile schalten wir nun die LED schon mal auf den oben in ledStatus definierten Zustand (also aus).

 

loop()

Nun geht es an die eigentliche Logik in loop(). Das mag zu Beginn noch etwas kompliziert wirken, ist es aber in Wirklichkeit überhaupt nicht:

Zuerst holen wir uns den aktuellen Zustand der LED (HIGH oder LOW bzw. ein oder aus) und den Zustand des Tasters (HIGH oder LOW bzw. gedrückt oder nicht gedrückt). Die Zustände kommen zunächst einmal nur in die Variablen ledStatus und tasterStatus.

 

Nun kommen wir zu der ersten If-Abfrage. Diese überprüft, ob der Taster aktuell gedrückt ist. Dafür wird der Wert aus tasterStatus mit LOW verglichen (==). LOW ist hier eine Konstante und steht in diesem Fall für 0 (aus). Das Gegenteil it HIGH und steht für 1 (ein). Ist tasterStatus also LOW, wird der Code zwischen { und } ausgeführt. Sonst nicht. Wenn der Taster nicht gedrückt wird, brauchen wir ja schließlich auch nichts machen. 😉

Sicherlich werden sich einige fragen, warum wir hier auf LOW überprüfen und nicht (wie man vermuten würde) auf HIGH. Durch die Einstellung INPUT_PULLUP liegt an dem Pin immer 5 Volt an. Wird der Taster nun gedrückt, verbindet er den Pin mit GND (Minuspol) und die Spannung fällt ab auf 0 Volt. Deshalb überprüfen wir hier auf LOW.

Natürlich könnte man den Pin auch nur mit INPUT versehen und dann mit dem Schalter 5 Volt drauf schalten. Allerdings bräuchte man dann zusätzlich einen Widerstand zwischen GND und dem Taster zusätzlich.

 

Jetzt müssen wir nur noch entscheiden, ob wir die LED ein oder aus schalten müssen. Und das bekommen wir heraus, indem wir uns den aktuellen Zustand der LED (Variable ledStatus) überprüfen. Das übernimmt natürlich wieder eine If-Abfrage innerhalb der ersten Abfrage für uns:

Die Abfrage ist hier noch durch else erweitert. Wenn die Bedingung nicht zutrifft, wird also alles zwischen den zweiten {} (nach dem else) ausgeführt. Wenn die LED also schon an (HIGH) ist, schalten wir sie mit digitalWrite aus (LOW). Im Anschluss warten wir 300ms (delay(300)), damit der Nutzer Zeit hat den Knopf wieder los zulassen und die LED nicht sofort wieder ausgeschaltet wird.

2 Gedanken zu “#3 digital input / digital output

  1. Watch out for where the genuine „SPLY-350″‚text is put on the Yeezy Boost 350 V2. In the photo to your side, you can see that the content basically doesn’t arrange, and essentially doesn’t have a striking resemblance. So utilize this photo as a direction to see whether they coordinate up, on the off chance that they don’t you can expect that they’re fake!

Schreibe einen Kommentar