const byte red = 9, green = 10, blue = 11, button = 2;
bool btnState, lastBtnState = 0, blink = 0;
byte mode = 0;
#define BLINK 250 //blink speed
#define DB 70 //button debounce delay
void setup() {
pinMode(button, INPUT_PULLUP); //Creates an "ACTIVE LOW" for a button press
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
digitalWrite(red, LOW); //To start in a known state
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
}
void doBlink(byte x){
bool ledState = 0;
byte led;
if(x == 1){
led = red;
}else if(x == 2){
led = green;
}else{
led = blue;
}
for(byte y = 0; y < 10; y++){
digitalWrite(led, (ledState = !ledState));
delay(BLINK);
}
return;
}
void zero(void){
for(byte y = 9; y <= 11; y++){
digitalWrite(y, HIGH);
delay(BLINK);
digitalWrite(y, LOW);
delay(BLINK);
}
return;
}
void loop() {
btnState = digitalRead(button);
if(btnState != lastBtnState){
delay(DB);
if(btnState == LOW){
mode++; //increment by +1
mode %= 4; //Four count loops back to Zero
blink = 1;
}
if(blink){
if(mode != 0){
doBlink(mode);
}else{
zero();
}
blink = 0;
}
}
lastBtnState = btnState;
}