====== Wie man auf einen Tastendruck reagiert ====== ===== Was du schon weißt ===== * Wie man eine LED an den //Arduino// anschließt und einen Widestand verwendet. * Wie man einen Quelltext bzw. ein Programm auf den //Arduino// hochlädt. Stecke **niemals** auf dem Steckbrett um, während der Arduino noch mit Strom versorgt wird. Achte darauf, dass auf dem Steckbrett keine **Kurzschlüsse** entstehen. ===== Was kommt jetzt? ===== 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 [[faecher:informatik:schrecksekunde:led2|Leuchtdiode]] erweitern: {{ :faecher:informatik:projekt4_steckplatine.png}} Vorsicht! Wenn in diesem Aufbau der //Arduino// mit Strom versorgt wird **und** der Taster gedrückt wird, kann in seltenen Fällen ein Kurzschluss entstehen. Dem kann man nur **sicher** entgehen, wenn man **nach** der Stromversorgung des //Arduino// und **vor** dem erstaligen Drücken des Tasters ein zum Aufbau passendes Programm aufgespielt wird. 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: ==== vollständiges Programm mit Taster ==== 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); } } ===== Ziel erreicht ===== **Herzlichen Glückwunsch! Du weißt nun, wie man auf einen Tastendruck reagiert und z.b. eine Leuchtdiode einschaltet.**\\ ===== Weitere Ideen ===== Wenn du noch Zeit hast, kannst du folgendes ausprobieren: * Baue eine zweite Leuchtdiode ein. Lasse nur eine leuchten, bis der Taster gedrückt wird. Schalte dann die erste Leuchtdiode aus und die zweite für 3 Sekunden an. Dann schalte wieder die erste ein und die zweite aus! * Baue eine Ampelschaltung. Wenn du Anleitung brauchst, findest du [[faecher:informatik:arduino:ampel_ueber_taster|hier]] welche. * Eine schwierige Sache: Baue eine Schaltung mit drei Leuchtdioden und einem Taster. Versuche ein Programm zu schreiben, bei dem bei jedem Tasterdruck "im Kreis" die Leuchtdioden ein- bzw. ausgeschaltet werden. ====== Wie geht's weiter? ====== Weiter geht's mit [[faecher:informatik:schrecksekunde:servo|Wie man einen Servomotor ansteuert]].