Metainformationen zur Seite
Dies ist eine alte Version des Dokuments!
Lauflicht über Taster
Das folgende Programm soll die einzelnen LEDs nach und nach einschalten.
int aktuell; // hier drin wird der Pin der LED gespeichert, die gerade an sein soll void setup() { pinMode(2, INPUT_PULLUP); // Eingang pinMode(3, OUTPUT); // 3 Ausgänge für die LED pinMode(4, OUTPUT); pinMode(5, OUTPUT); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); aktuell = 3; } void loop() { if (!digitalRead(2)) { digitalWrite(aktuell, LOW); // Aktuell leuchtende LED ausschalten aktuell = aktuell + 1; if (aktuell == 6) { // An Pin 6 ist keine LED mehr, also wieder von vorne aktuell = 3; } digitalWrite(aktuell, HIGH); // naechste LED einschalten // Marke 2 } // Marke 1 fuer spaeter }
Das Programm funktiniert noch nicht wie gewollt, die LEDs leuchten alle (wie genau?) und wenn man den Taster los lässt, leuchtet eine zufällig LED.
Um den Fehler aufc_mazuspüren baut man nach der „Marke 1“ ein „delay(100);“ ein.
Man sieht nun, was passiert, in schneller Folge werden die LEDs geschaltet. Was ist der Fehler?
Die Zeile „if (!digitalRead(2)) {“ fragt nur ab, ob ein Taster gedrückt ist, nicht ob er wieder losgelassen wurde.
Also bauen wir ein warten bis der Taster wieder losgelassen wurde ein. Nach „Marke 2“:
while( !digitalRead(2) ){delay(10);}
Diese Zeile wird so lange aufgeführt, bis der Taster wieder losgelassen wurde.