====== 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!** {{:faecher:informatik:arduino:lauflicht-mit-taster3b.png?600|}} 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 } }