#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);
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
led5:A
led5:C
btnOff:1.l
btnOff:2.l
btnOff:1.r
btnOff:2.r
btnOn:1.l
btnOn:2.l
btnOn:1.r
btnOn:2.r
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
r5:1
r5:2