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.