Metainformationen zur Seite
  •  

Lauflicht über Taster 2

Letzt kann man LEDs vorwärts und rückwerts laufen lassen. Hierzu ist ein kleiner Umbau erforderlich. Bitte schaut genau hin!

int aktuell; // hier drin wird der Pin der LED gespeichert, die gerade an sein soll
void setup() {
  pinMode(11, INPUT_PULLUP); // Eingang
  pinMode(12, INPUT_PULLUP); // Eingang
  pinMode(2, OUTPUT); // 3 Ausgänge für die LED
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
 
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
 
  aktuell = 3;
}
 
void loop() {
  if (!digitalRead(11)) {
    digitalWrite(aktuell, LOW); // Aktuell leuchtende LED ausschalten
    aktuell = aktuell + 1;
    if (aktuell == 5) { // An Pin 6 ist keine LED mehr, also wieder von vorne
      aktuell = 2;
    }
    digitalWrite(aktuell, HIGH); // naechste LED einschalten
    while( !digitalRead(11) ){delay(10);}
  }
  if (!digitalRead(12)) {
    digitalWrite(aktuell, LOW); // Aktuell leuchtende LED ausschalten
    aktuell = aktuell - 1;
    if (aktuell == 1) { // An Pin 6 ist keine LED mehr, also wieder von vorne
      aktuell = 4;
    }
    digitalWrite(aktuell, HIGH); // naechste LED einschalten
    while( !digitalRead(12) ){delay(10);}
  }
 
}

Auch dieses Programm läuft nicht ganz wie gehofft, wenn ein Taster gedrück ist, ist der andere Taster blockiert. Die while-Schleifen „halten den Programmablauf gefangen“.

int aktuell; // hier drin wird der Pin der LED gespeichert, die gerade an sein soll
int zustand1 = 0;
int zustand2 = 0;
void setup() {
  pinMode(11, INPUT_PULLUP); // Eingang
  pinMode(12, INPUT_PULLUP); // Eingang
  pinMode(2, OUTPUT); // 3 Ausgänge für die LED
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
 
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
 
  aktuell = 3;
}
 
void loop() {
  if (!digitalRead(11)) {
    zustand1 = 1; // Taster 1 wurde gedrueckt
  }
  if (digitalRead(11) && zustand1==1) {
    digitalWrite(aktuell, LOW); // Aktuell leuchtende LED ausschalten
    zustand1 = 0; // Das Loslassen wurde verarbeitet
    aktuell = aktuell + 1;
    if (aktuell == 5) { // An Pin 6 ist keine LED mehr, also wieder von vorne
      aktuell = 2;
    }
    digitalWrite(aktuell, HIGH); // naechste LED einschalten
  }
 
 
  if (!digitalRead(12)) {
    zustand2 = 1;
  }
  if (digitalRead(12) && zustand2==1) {
    digitalWrite(aktuell, LOW);
    zustand2 = 0;
    aktuell = aktuell - 1;
    if (aktuell == 1) {
      aktuell = 4;
    }
    digitalWrite(aktuell, HIGH); // naechste LED einschalten
  }
 
}