Um zu demonstrieren, wie man auf einen Tastendruck reagieren kann, brauchen wir einen Aufbau, der sowohl einen Taster als auch ein Objekt beinhält, mit dem man die Reaktion sichtbar machen kann. Wir wollen dazu den Aufbau mit der Leuchtdiode erweitern:
Ein pssendes Programm wäre:
void setup() { pinMode(3, OUTPUT); pinMode(2, INPUT_PULLUP); } void loop() { if(!digitalRead(2)) { digitalWrite(3, HIGH); delay(250); } }
Die Zeile
pinMode(2, INPUT_PULLUP);
im setup-Teil teilt dem Arduino mit, dass er am Kontakt D2 erwarten soll, dass dort Strom in den Arduino fließt. Zudem schaltet er einen großen Widerstand in den Stromkreis, sodass selbst bei gedrücktem Taster kein Kurzschluss entsteht!
Die Zeilen
if(!digitalRead(2)) { digitalWrite(3, HIGH); delay(250); }
im loop-Teil veranlassen den Arduino zu prüfen, ob Strom einfließt über den Kontakt D2. Falls ja, schaltet der Arduino die Leuchtdiode ein und wartet eine Viertelsekunde.
Problem: Der Arduino schaltet die Leuchtdiode zwar ein, aber nicht wieder aus!
Um das leisten zu können, müsste sich der Arduino „merken“, ob die Leuchtdiode schon eingeschaltet ist oder nicht. Dazu verwenden wir eine Merkvariable, die nur zwei Werte speichern kann: wahr bzw. falsch, oder gleichwertig: ein bzw. aus. Der Wert wahr lautet auf englisch true und ist mit HIGH gleichwertig. Der Wert falsch lautet auf englisch false und ist mit LOW gleichwertig.
Damit sollte der Quelltext wie folgt aussehen:
boolean status; void setup() { pinMode(3, OUTPUT); pinMode(2, INPUT_PULLUP); digitalWrite(3, LOW); status = false; } void loop() { if(!digitalRead(2)) { status=!status; digitalWrite(3, status); delay(250); } }
Die Zeile
status = false;
setzt zu Beginn den Merker, ob die Leuchtdiode eingeschaltet ist, auf ausgeschaltet. Die Zeilen
status=!status; digitalWrite(3, status);
ändern zuerst den Status von wahr auf falsch bzw. umgekehrt (je, nachdem). Zudem wird die Leuchtdiode dann ein- oder ausgeschaltet. (Wieder je, nachdem! Bedenke, statt HIGH kann man auch true beim Schalten schreiben, statt LOW auch false.)
Und wenn wir schon so weit sind, führen wir zwei weitere Merker ein: eine Variable (ledPin
) soll sich merken, an welchem Kontakt die Leuchtdiode angeschlossen ist, die andere (tasterPin
), wo der Taster zu finden ist.
Das hat den Vorteil, dass man sich bei mehreren verwendeten Kontakten nur die Namen merken muss. Das fällt den meisten Leuten einfacher, als sich Zahlen zu merken!
Damit sieht der Quelltext folgendermaßen aus:
int ledPin = 3; int tasterPin = 2; boolean status; void setup() { pinMode(ledPin, OUTPUT); pinMode(tasterPin, INPUT_PULLUP); digitalWrite(ledPin, LOW); status = false; } void loop() { if(!digitalRead(tasterPin)) { status=!status; digitalWrite(ledPin, status); delay(250); } }
Herzlichen Glückwunsch! Du weißt nun, wie man auf einen Tastendruck reagiert und z.b. eine Leuchtdiode einschaltet.
Wenn du noch Zeit hast, kannst du folgendes ausprobieren:
Weiter geht's mit Wie man einen Servomotor ansteuert.