Metainformationen zur Seite
  •  

Lauflicht über Taster

Das folgende Programm soll die einzelnen LEDs nach und nach auf Tastendruck 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ällige LED.

Um den Fehler aufzuspüren baut man nach der „Marke 1“ ein:

delay(100);

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.