/*
* Fahrradlicht Version 3.0, blinkend
*/
int led1Pin = 12;
int led2Pin = 11;
int led3Pin = 10;
int led4Pin = 9;
int led5Pin = 8;
int switchPin = 2; // Schalter ist mit Pin 2 verbunden
int val; // Variable für den Pin Zustand
int val2; // variable für den Prellstatus
int buttonState; // Variable für den letzten Schalterzustand
int lightMode = 0; // Ist das Licht an oder aus?
void setup() {
pinMode(switchPin, INPUT); // Schalter-Pin ist Input
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(led3Pin, OUTPUT);
pinMode(led4Pin, OUTPUT);
pinMode(led5Pin, OUTPUT);
buttonState = digitalRead(switchPin); // Anfangszustand lesen
}
void loop() {
val = digitalRead(switchPin); // Eingabewert lesen und in val speichern
delay(10); // 10 Millisekunden warten
val2 = digitalRead(switchPin); // Eingabe noch einmal lesen
if (val == val2) { // Unterscheiden sich die beiden Werte
if (val != buttonState) { // Der Zustand des Schalters hat sich verändert
if (val == LOW) { // Ist der Schalter gedrückt?
if (lightMode == 0) { // Ist das Licht aus?
lightMode = 1; // Licht einschalten!
digitalWrite(led1Pin, HIGH);
digitalWrite(led2Pin, HIGH);
digitalWrite(led3Pin, HIGH); // Licht an!
digitalWrite(led4Pin, HIGH);
digitalWrite(led5Pin, HIGH);
delay(100);
digitalWrite(led1Pin, LOW);
digitalWrite(led2Pin, LOW);
digitalWrite(led3Pin, LOW); // Licht aus!
digitalWrite(led4Pin, LOW);
digitalWrite(led5Pin, LOW);
delay(100);
}
else {
lightMode = 0; // Licht ausschalten!
// Es muss nichts mehr getan werden, weil das Licht am Ende
// vom Blinken ausgeschaltet ist
}
}
buttonState = val; // Zustand merken
}
}
}
Du bist ganz stolz, weil du dich daran erinnert hast, dass die LEDs nicht mehr ausgeschaltet werden müssen, wenn der Sketch in den "Licht ausschalten!" Zweig betritt. Sie sind am Ende des Codes bereits aus, wenn lightMode gleich 1 ist.
Übertrage diesen Sketch auf deinen Fahrradlicht-Prototypen und versuche ihn aus.
Blitz Quiz
- Funktioniert dieser Sketch richtig? Markiere den folgenden Text mit der Maus, um die Lösung zu sehen Nein!
- Was macht er? Markiere den folgenden Text mit der Maus, um die Lösung zu sehen Wenn der Schalter zum Einschalten gedrückt wird, gibt es nur ein Blinken.
- Verwende die println() Funktion und strenge dein Hirn an, warum dieser Sketch nicht funktioniert. Was passiert unmittelbar nachdem der Schalter zum Einschalten gedrückt wird? Was passiert, wenn die loop() Prozedur das nächste Mal durchlaufen wird? Markiere den folgenden Text mit der Maus, um die Lösung zu sehen In dem Moment, in dem der Schalter gedrückt wird, ist die Bedingung in der if Anweisung wahr und lightMode ändert sich von 0 (aus) auf 1 (an). Die LEDs leuchten für 100ms und sind dann 100ms aus. Beim nächsten Durchlauf der loop() Prozedur, ist die Bedingung in der if Anweisung falsch (der Zustand des Schalters hat sich nicht verändert) und der Code, der die LEDs blinken lassen sollte, kommt nicht zur Ausführung. Es kommt nur zu einem kurzen Blinken.




vor 2 years 31 weeks
Hi, ich muss zugeben, das ich den Fehler eine ganze Zeit nicht gefunden habe. Jetzt wo ich lösung aber kenne, ist es wie mit allem, ganz einfach.
Login or register to post comments