Hey everybody,
the digital hourglass works as it should (08 Starter Kit: Digital Hourglass - YouTube)
I want to add a new feature: after it finished counting for the first time (and all leds are shining until I tilt the board) the leds should blink automatically and continue shining (until I tilt the board).
But that does not work yet - after the process (counting, all leds are shining, blinking) the leds don’t come back to shining- they started blinking all over the place.
Can you please check the code and tell me what the problem is?
Thanks!
const int switchPin = 8; //Konstante für den Kippschalter
unsigned long previousTime = 0; //Variable für die Zeit (merkt sich, wann die LED zuletzt geändert wurde); unsigned akzeptiert nur positive Werte
unsigned long currentTime = 0;
unsigned long time;
int switchState = 0; //Variable für aktuellen Zustand des Schalters
int prevSwitchState = 0; //Variable für vorangegangenen Zustand des Schalters
int led = 2; //Variable zählt mit, welche LED als nächstes dran ist und beginn mit 2
long interval = 500; //Variable für Pause zwischen den LED-Anschaltungen
void setup() {
Serial.begin(9600);
// digitale Pins2-7 für LEDs werden als Ausgänge definiert:
for(int x = 2; x<8;x++){
pinMode(x, OUTPUT);
}
pinMode(switchPin, INPUT); //Festlegung von switchPin als Eingang
}
void loop() {
//Überprüfung der Startzeit:
unsigned long currentTime = millis();
//Auswertung der verstrichenen Zeit:
if(currentTime - previousTime > interval) {
digitalWrite(led, HIGH); //neue LED wird eingeschaltet
led++;
Serial.print("Led: ");
Serial.println(led);
delay(500);
if (led == 8){ //Einschaltstatus der letzten LED wird gecheckt
for(int i=0; i<=1; i++) {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
delay(500);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
delay(500);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
delay(500);
}
switchState = digitalRead(switchPin);
if(switchState == prevSwitchState){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
}
}
}
switchState = digitalRead(switchPin); //nach Check der Zeit wird Zustand des Schalters in Erfahrung gebracht und in die Variable switchState geschrieben
if(switchState != prevSwitchState){ //Check, ob sich Pos. des Schalters verändert hat. Ja: Ausschalten aller LEDs
for(int x = 2;x<8;x++){
digitalWrite(x, LOW);
}
led = 2; //Variable led auf ersten Pin zurückgesetzt
previousTime = currentTime; //Timer beginnt von vorn
}
prevSwitchState = switchState; //Schalterzustand wird neu abgespeichert und im nächsten Durchlauf mit switchState verglichen
}