#include <Bounce2.h>
#define PIN_MODE INPUT_PULLUP
#define INTERVAL_IN_MS 10
#define TIMEOUT 2500
#define LED_RED 10
#define LED_YEL 9
#define LED_GRE 8
Bounce2::Button BTN_YEL = Bounce2::Button();
Bounce2::Button BTN_BLU = Bounce2::Button();
Bounce2::Button BTN_GRE = Bounce2::Button();
int z = 0;
unsigned long last = millis();
void setup() {
// put your setup code here, to run once:
BTN_GRE.attach(7, PIN_MODE);
BTN_GRE.interval(INTERVAL_IN_MS);
BTN_GRE.setPressedState (LOW);
BTN_BLU.attach(6, PIN_MODE);
BTN_BLU.interval(INTERVAL_IN_MS);
BTN_BLU.setPressedState (LOW);
BTN_YEL.attach(5, PIN_MODE);
BTN_YEL.interval(INTERVAL_IN_MS);
BTN_YEL.setPressedState (LOW);
}
void loop() {
// put your main code here, to run repeatedly:
BTN_GRE.update();
BTN_BLU.update();
BTN_YEL.update();
switch(z)
{
case 0:
{
digitalWrite(LED_RED, HIGH);
if (BTN_GRE.pressed())
{
z = 1;
last = millis();
}
break;
}
case 1:
{
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YEL, HIGH);
if (BTN_YEL.pressed())
{
z = 2;
last = millis();
}
if (BTN_BLU.pressed())
{
z = -1;
last = millis();
}
if (millis() - last > TIMEOUT)
{
z = 0;
}
break;
}
case 2:
{
if (BTN_BLU.pressed())
{
z = 3;
last = millis();
}
if (BTN_YEL.pressed())
{
z = -1;
last = millis();
}
if (millis() - last > TIMEOUT)
{
z = 0;
}
break;
}
case 3:
{
if (BTN_BLU.pressed())
{
z = 4;
last = millis();
}
if (BTN_YEL.pressed())
{
z = -1;
last = millis();
}
if (millis() - last > TIMEOUT)
{
z = 0;
}
break;
}
case 4:
{
if (BTN_YEL.pressed())
{
z = 5;
last = millis();
}
if (BTN_BLU.pressed())
{
z = -1;
last = millis();
}
if (millis() - last > TIMEOUT)
{
z = 0;
}
break;
}
case 5:
{
if (BTN_BLU.pressed())
{
z = 6;
last = millis();
}
if (BTN_YEL.pressed())
{
z = -1;
last = millis();
}
if (millis() - last > TIMEOUT)
{
z = 0;
}
break;
}
case 6:
{
if (BTN_GRE.pressed())
{
z = 7;
}
if (BTN_BLU.pressed() || BTN_YEL.pressed())
{
z = -1;
last = millis();
}
if (millis() - last > TIMEOUT)
{
z = 0;
}
break;
}
case 7:
{
digitalWrite(LED_YEL, LOW);
digitalWrite(LED_GRE, HIGH);
if (BTN_GRE.pressed())
{
z = 0;
}
break;
}
}
}