Digitaler Input
Unter digitalem Input versteht man Schaltungen, welche lediglich zwei Zustände kennen: EIN oder AUS. Im Falle des Arduino entspricht der Zustand EIN dabei einer elektrischen Spannung von 5V und AUS einer Spannung von 0V. Je nachdem ob man diese Zustände einliesst oder ausgibt spricht man von Input oder Output. Am Arduino verwenden wir vor allem die Digitalen PINs (D0-D13) für digitale Schaltungen. Es können jedoch auch die Analogen PINs verwendet werden, falls noch mehr Ein- bzw. Ausgänge benötigt werden.
Die entsprechende Funktion für das Einlesen lautet:
digitalRead(PIN);
Auslesen des Wertes am angegebenen PIN
Im Folgenden werden wir einen Tastendruck mit dem Arduino einlesen. Dabei gibt es prinzipiell zwei Möglichkeiten, welche hier illustriert sind:
Negative oder positive Logik
Der Unterschied zwischen negativer und positiver Logik besteht in der Tatsache, dass bei einer negativen Logik der Wert am digitalen Pin auf 0V (LOW) gezogen wird, wenn man den Taster drückt. Wird der Taster dagegen nicht gedrückt so fliesst ein kleiner Strom nach 5V und zieht den Wert am digitalen Pin nach oben (HIGH). Bei der positiven Logik ist dies genau anders herum. Das ist auch der Grund warum wir bei dieser Schaltung sog. Pullup- bzw. Pulldown Widerstände verwenden. Diese sorgen dafür, dass die Spannung abfällt = pulldown (oder ansteigt = pullup) wenn der Taster nicht gedrückt ist und wir somit wir auch wirklich 5V bzw. 0V einlesen werden wenn wir den Taster drücken.
Um einen Taster am Arduino einzulesen kann eine der beiden Logiken verwendet werden – beide funktionieren. Der Code lautet dann wie folgt:
Interner PullUp Widerstand
Bis jetzt haben wir einen extra 10kOhm Widerstand verwendet um die Spannung am PIN anzuheben wenn der Taster nicht gedrückt wurde. Der Microkontroller verfügt aber auch über eigene, interne Pullup Widerstände, die sich per Programmierung aktivieren lassen. Diese Methode funktioniert nur bei einer negativen Logik ist dann aber sehr komfortabel, da nur noch ein Taster und kein Widerstand benötigt wird. Denn internen PullUp aktiviert man, indem direkt nach dem Aufruf von pinMode() im setup() die Funktion digitalWrite(pin, HIGH) gerufen wird.
#define TASTER 2 void setup() { pinMode(TASTER, INPUT); digitalWrite(TASTER, HIGH); }
Debounce
Es kann passieren, dass der Befehl digitalRead() zu schnell hintereinander gelesen wird und wir deshalb mehrere “Pushs” erhalten. Dies kann vermieden werden, wenn wir ein sog. Debouncing hinzufügen. Diese arbeitet mit der Funktion millis() um sich den letzten Zeitpunkt des Drückens zu merken und ein kleine Verzögerung hinzuzufügen.
Aufgaben
1. Nutzt den Taster um zwischen zwei LEDs hin- und her zu wechseln.
2. Programmiert den Code so, dass erst nach viermaligem drücken der Wechsel erfolgt.
3. Programmiert einen Papagei, welcher eine eingegebene Sequenz wiederholt.