Hi,
I need some help with my code. In my code the "default" case shows the battery level and lights up LED13. I have a push button for jumping from case 1 to case 2 and so on.
The thing I would like to happen is the default case to only stay on for 5 seconds, then the code automaticly jumps to case 1.
I could use delays for this, but that would not work with the push button (if the code is in the delay part, the button doesnt work).
Any ideas on how to put a delay and a jump in my default case, without using "delay"?
Thanks!
void loop() {
buttonPoll = analogRead(button) > 500 ? 1 : 0; //For using A7 as button input
if(buttonPoll == 1){
delay(30); //For debounce 30ms should be enough
unsigned long chrono = millis();
while (buttonPoll == 1)
buttonPoll = analogRead(button) > 500 ? 1 : 0;
if (millis()-chrono < 500) state = old + 1; //Short press under 0.5 second
else state = 0; //Long press is over 0.5 second
}
else {
delay(50);
}
long currentVoltage;
currentVoltage = readVcc();
// ----- SWITCH CASE ------
switch (state) {
case 1: //NL
digitalWrite(UV,LOW);
digitalWrite(LED13,LOW);
digitalWrite(X1A,LOW);
digitalWrite(X1B,LOW);
digitalWrite(X1C,LOW);
digitalWrite(B20,LOW);
digitalWrite(B40,LOW);
digitalWrite(B60,LOW);
digitalWrite(B80,LOW);
digitalWrite(B99,LOW);
digitalWrite(RED,LOW);
digitalWrite(GREEN,LOW);
digitalWrite(BLUE,LOW);
digitalWrite(NL, HIGH);
old = state;
break;
case 2: //25%
digitalWrite(UV,LOW);
digitalWrite(NL,LOW);
digitalWrite(LED13,LOW);
digitalWrite(X1B,LOW);
digitalWrite(X1C,LOW);
digitalWrite(B20,LOW);
digitalWrite(B40,LOW);
digitalWrite(B60,LOW);
digitalWrite(B80,LOW);
digitalWrite(B99,LOW);
digitalWrite(RED,LOW);
digitalWrite(GREEN,LOW);
digitalWrite(BLUE,LOW);
digitalWrite(X1A, HIGH);
old = state;
break;
case 3: //100%
digitalWrite(UV,LOW);
digitalWrite(NL,LOW);
digitalWrite(LED13,LOW);
digitalWrite(B20,LOW);
digitalWrite(B40,LOW);
digitalWrite(B60,LOW);
digitalWrite(B80,LOW);
digitalWrite(B99,LOW);
digitalWrite(RED,LOW);
digitalWrite(GREEN,LOW);
digitalWrite(BLUE,LOW);
digitalWrite(X1A, HIGH);
digitalWrite(X1B, HIGH);
digitalWrite(X1C, HIGH);
old = state;
break;
case 4: //UV
digitalWrite(NL,LOW);
digitalWrite(LED13,LOW);
digitalWrite(X1A,LOW);
digitalWrite(X1B,LOW);
digitalWrite(X1C,LOW);
digitalWrite(B20,LOW);
digitalWrite(B40,LOW);
digitalWrite(B60,LOW);
digitalWrite(B80,LOW);
digitalWrite(B99,LOW);
digitalWrite(RED,LOW);
digitalWrite(GREEN,LOW);
digitalWrite(BLUE,LOW);
digitalWrite(UV, HIGH);
old = state;
break;
case 5: //R
digitalWrite(UV,LOW);
digitalWrite(LED13,LOW);
digitalWrite(X1A,LOW);
digitalWrite(X1B,LOW);
digitalWrite(X1C,LOW);
digitalWrite(B20,LOW);
digitalWrite(B40,LOW);
digitalWrite(B60,LOW);
digitalWrite(B80,LOW);
digitalWrite(B99,LOW);
digitalWrite(UV,LOW);
digitalWrite(GREEN,LOW);
digitalWrite(BLUE,LOW);
digitalWrite(RED, HIGH);
old = state;
break;
case 6: //G
digitalWrite(UV,LOW);
digitalWrite(LED13,LOW);
digitalWrite(X1A,LOW);
digitalWrite(X1B,LOW);
digitalWrite(X1C,LOW);
digitalWrite(B20,LOW);
digitalWrite(B40,LOW);
digitalWrite(B60,LOW);
digitalWrite(B80,LOW);
digitalWrite(B99,LOW);
digitalWrite(RED,LOW);
digitalWrite(NL,LOW);
digitalWrite(BLUE,LOW);
digitalWrite(GREEN, HIGH);
old = state;
break;
case 7: //B
digitalWrite(UV,LOW);
digitalWrite(LED13,LOW);
digitalWrite(X1A,LOW);
digitalWrite(X1B,LOW);
digitalWrite(X1C,LOW);
digitalWrite(B20,LOW);
digitalWrite(B40,LOW);
digitalWrite(B60,LOW);
digitalWrite(B80,LOW);
digitalWrite(B99,LOW);
digitalWrite(RED,LOW);
digitalWrite(GREEN,LOW);
digitalWrite(NL,LOW);
digitalWrite(BLUE, HIGH);
old = state;
break;
default: //
digitalWrite(UV,LOW);
digitalWrite(NL,LOW);
digitalWrite(X1A,LOW);
digitalWrite(X1B,LOW);
digitalWrite(X1C,LOW);
digitalWrite(RED,LOW);
digitalWrite(GREEN,LOW);
digitalWrite(BLUE,LOW);
digitalWrite(LED13, HIGH);
// Batteridisplay
//Serial.println( readVcc(), DEC );
//delay(30);
if ((currentVoltage > 3000) && (currentVoltage < 3250)) {
digitalWrite(B20, HIGH);
}
else {
digitalWrite(B20, LOW);
}
if ((currentVoltage > 3250) && (currentVoltage < 3500)) {
digitalWrite(B40, HIGH);
}
else {
digitalWrite(B40, LOW);
}
if ((currentVoltage > 3500) && (currentVoltage < 3750)) {
digitalWrite(B60, HIGH);
}
else {
digitalWrite(B60, LOW);
}
if ((currentVoltage > 3750) && (currentVoltage < 4000)) {
digitalWrite(B80, HIGH);
}
else {
digitalWrite(B80, LOW);
}
if (currentVoltage > 4000) {
digitalWrite(B99, HIGH);
}
else {
digitalWrite(B99, LOW);
}
old = 0;
break;
}
delay(1); // delay in between reads for stability
}