Ich muss für die Schule ein Projekt machen, wo ein Lauflicht zu implementieren ist.
Dafür habe ich eine for-Schleife verwendet und die funktioniert wunderbar.
Nur muss ich noch einen Button hinzufügen, der das Lauflicht an der aktuellen Position stoppt, und beim erneuten Drücken fortgesetzt wird.
Hier komme ich nicht weiter.
Das ist mein Code bist jetzt.
int ledArray[3]; //sind 3 LEDs deswegen ein Array
int pin=7;
int button=3;
void setup() {
for(int i = 0; i<3; i++){
ledArray[i]=pin;
pin++;
pinMode(ledArray[i], OUTPUT);
}
pinMode(button, INPUT_PULLUP);
}
void loop() {
int value=digitalRead(button);
for(int i = 0; i<3; i++){
digitalWrite(ledArray[i], HIGH);
delay(250);
digitalWrite(ledArray[i], LOW);
delay(250);
}
}
Wäre froh wenn mir jemand helfen könnte.
Liebe Grüße
Zunächst ist es schwierig für deinen Arduino eine Betätigung des Tasters zu erkennen, da Du ihn quasi die ganze Zeit stopsst. mit delay verbietest du im quasi für 250ms Sekunden irgendetwas zu machen, dann darf er etwas erledigen, was ihm vielleicht ein paar MikroSekunden kostet, dann stoppst Du ihn wieder....
Das geht leider nur durch einen komplett anderen Ansatz.
Nachdem du den Unterschied zwischen Blink ( mit zwei delay() ) und BlinkWithoutDelay erkannt und verstanden hast, kannst du ja mal was ähnliches für dein Lauflicht versuchen.
Tip: statt der for Schleife ist der aktuelle Zustand in Variablen abgelegt und loop() ist deine Schleife...
Dann kann man einfach in jedem Schritt den Taster auslesen.
Bei dir wird der Taster nur alle 23250 = 1500 ms einmal gelesen.
Ein einziges delay(250) in loop() wäre schon besser, um nach jedem Schritt reagieren zu können.
Wozu braucht es übrigens einen weiteren Taster?
Einfach : während der Taster gedrückt ist, läuft das Lauflicht. Wenn der Taster losgelassen ist, steht es.
Schwieriger: Einmal drücken startet das Lauflicht, nochmal Drücken stoppt es. Was passiert, wenn der Tastendruck kürzer als 250 ms oder länger als 500 ms ist ?
ich habe dir einen Teil vorbereitet und dein LED Array korrigiert. Die vierte Led dient zur Statusanzeige des Tasters mit Schalterfunktion. Dafür habe ich die Bounce2 Lib verwendet. Die Funktion "heartbeat" (agmue's Idee) dient zur Anzeige ob dein Sketch blockiert oder noch arbeitet. Beides kannste entfernen durch löschen der Zeile 54 und der Funktion Zeile 61.
Deine Lauflichtfunktion schreibste komplett um ohne delay und ohne Schleife. Dafür benötigst du millis(). Hier zwei verständliche Erklärungen dazu. Sketch lesen und verstehen solltest du natürlich auch. Wenn du das alles am Ende dem Lehrer erklären kannst, gibt das Punkte satt. Ich hoffe das dich das nicht erschlägt. Für dein Lauflicht noch einen Hinweis. Erstelle dir auf Papier einen Ablaufplan bzw. Ablaufdiagramm. Dann siehst du ohne eine Zeile Code was muss wie und wann passieren. Wenn das im Ablauf alles logisch klar ist setzte das in Code um.