#include "debouncer.h"
byte LED1 = 2;
byte LED2 = 3;
byte LED3 = 4;
byte LED4 = 5;
byte LED5 = 6;
byte buttonON = 7;
byte buttonOFF = 8;
void setup()
{
Serial.begin(115200);
Serial.println("\n\nLightshow Test\n");
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(buttonON, INPUT_PULLUP);
pinMode(buttonOFF, INPUT_PULLUP);
}
typedef struct LightshowData
{
unsigned int delayTime;
byte ledPin;
bool ledState;
};
const byte numStates = 10;
const LightshowData lightshowData[numStates] =
{
{ 300, LED1, HIGH },
{ 50, LED2, HIGH },
{ 50, LED3, HIGH },
{ 50, LED4, HIGH },
{ 50, LED5, HIGH },
{ 300, LED1, LOW },
{ 100, LED2, LOW },
{ 100, LED3, LOW },
{ 100, LED4, LOW },
{ 100, LED5, LOW }
};
void loop ()
{
static bool doLightshow = false;
static Debouncer buttonOn(buttonON);
static Debouncer buttonOff(buttonOFF);
buttonOn.Update();
buttonOff.Update();
if (buttonOn.Fall())
{
Serial.println("buttonOn falling edge.");
doLightshow = true;
}
else if (buttonOff.Fall())
{
Serial.println("buttonOff falling edge.");
doLightshow = false;
}
if (doLightshow)
{
static byte state = 0;
unsigned long currentTimestamp = millis();
static unsigned long previousTimestamp = currentTimestamp;
if (currentTimestamp - previousTimestamp >= lightshowData[state].delayTime)
{
previousTimestamp += lightshowData[state].delayTime;
digitalWrite(lightshowData[state].ledPin, lightshowData[state].ledState);
state = ++state % numStates;
Serial.print("state = ");
Serial.println(state);
}
}
else
{
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
}
}