#include <Button.h>
#include <Streaming.h> //debug
#define PULLUP true
#define INVERT true
#define DEBOUNCE_MS 20
#define SWI_1 2
#define SWI_2 3
#define SWI_3 4
#define SWI_4 5
#define led1 6
#define led2 7
#define led3 8
#define led4 9
#define rel1 10
#define rel2 11
#define rel3 12
#define rel4 13
Button sw1(SWI_1, PULLUP, INVERT, DEBOUNCE_MS);
Button sw2(SWI_2, PULLUP, INVERT, DEBOUNCE_MS);
Button sw3(SWI_3, PULLUP, INVERT, DEBOUNCE_MS);
Button sw4(SWI_4, PULLUP, INVERT, DEBOUNCE_MS);
byte st1, st2, st3, st4;
boolean dev_startup;
boolean dev_setup;
void setup()
{
Serial.begin(9600); //debug
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(rel1, OUTPUT);
pinMode(rel2, OUTPUT);
pinMode(rel3, OUTPUT);
pinMode(rel4, OUTPUT);
st1=0;
st2=0;
st3=0;
st4=0;
}
void loop() {
sw1.read();
sw2.read();
sw3.read();
sw4.read();
if(sw1.pressedFor(1500)){ //long press - works
digitalWrite(led1, HIGH);
delay(300);
digitalWrite(led1, LOW);
delay(300);
digitalWrite(led1, HIGH);
delay(300);
digitalWrite(led1, LOW);
Serial << "Setup\n"; //debug
//DO SOME SETUP
}
if(sw1.pressedFor(2500)&&sw4.pressedFor(2500)){ //factory reset
Serial << "FACTORY RESET\n"; //debug
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
//digitalWrite(led4, HIGH);
while(true){ //problem here
if(sw4.wasReleased()){
Serial << "RESET OK\n";
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(400);
digitalWrite(led3, HIGH);
delay(300);
digitalWrite(led3, LOW);
delay(300);
digitalWrite(led3, HIGH);
delay(300);
digitalWrite(led3, LOW);
//EEPROM erase
break;
} else if(sw1.wasReleased()||sw2.wasReleased()||sw3.wasReleased()){
Serial << "RESET CANCEL\n"; //debug
break;
}
}
}
if((sw1.wasReleased())&&(st1==0)){ //works
digitalWrite(led1, HIGH);
digitalWrite(rel1, HIGH);
st1=1;
} else if((sw1.wasReleased())&&(st1==1)){
digitalWrite(led1, LOW);
digitalWrite(rel1, LOW);
st1=0;
}
if((sw2.wasReleased())&&(st2==0)){ //works
digitalWrite(led2, HIGH);
digitalWrite(rel2, HIGH);
st2=1;
} else if((sw2.wasReleased())&&(st2==1)){
digitalWrite(led2, LOW);
digitalWrite(rel2, LOW);
st2=0;
}
if((sw3.wasReleased())&&(st3==0)){ //works
digitalWrite(led3, HIGH);
digitalWrite(rel3, HIGH);
st3=1;
} else if((sw3.wasReleased())&&(st3==1)){
digitalWrite(led3, LOW);
digitalWrite(rel3, LOW);
st3=0;
}
if((sw4.wasReleased())&&(st4==0)){ //works
digitalWrite(led4, HIGH);
digitalWrite(rel4, HIGH);
st4=1;
} else if((sw4.wasReleased())&&(st4==1)){
digitalWrite(led4, LOW);
digitalWrite(rel4, LOW);
st4=0;
}
}
Hi everyone. I'm using this library for switches GitHub - JChristensen/JC_Button: Arduino library to debounce button switches, detect presses, releases, and long presses
This is my code and I've just done some simple things right now but I've stuck with while statement (find "problem here" in comments in code). HW is working perfectly, because all other if statements work. When I enter in "factory reset", first some LEDs are lit and after that it should perform factory reset if I press switch 4 and cancel if I press any other switch. The problem is when I enter in "factory reset" mode which ever switch do I press, nothing happens. Any Ideas?