const byte wledPin = 3;
const byte y1ledPin = 4;
const byte y2ledPin = 5;
const byte y3ledPin = 6;
const byte gLeftLedPin = 7;
const byte rLeftLedPin = 8;
const byte gRightLedPin = 9;
const byte rRightLedPin = 10;
const byte lPedalButtonPin = 11;
const byte rPedalButtonPin = 12;
const byte startButtonPin = A0;
unsigned long yellowInterval = 1000;
unsigned long whiteInterval = 5000;
void setup()
{
Serial.begin(115200);
Serial.println("christmas tree starting");
pinMode(y1ledPin, OUTPUT);
pinMode(y2ledPin, OUTPUT);
pinMode(y3ledPin, OUTPUT);
pinMode(gLeftLedPin, OUTPUT);
pinMode(rLeftLedPin, OUTPUT);
pinMode(gRightLedPin, OUTPUT);
pinMode(rRightLedPin, OUTPUT);
pinMode(lPedalButtonPin, INPUT_PULLUP);
pinMode(rPedalButtonPin, INPUT_PULLUP);
pinMode(startButtonPin, INPUT_PULLUP);
}
void loop()
{
static byte mode = 0;
static unsigned long timer = 0;
static bool lastStartButtonState = HIGH;
if (mode == 0)
{
bool startButtonState = digitalRead(startButtonPin);
if (startButtonState != lastStartButtonState)
{
if (startButtonState == LOW)
{
digitalWrite(rRightLedPin, LOW);
digitalWrite(rLeftLedPin, LOW);
digitalWrite(gLeftLedPin, LOW);
digitalWrite(gRightLedPin, LOW);
timer = millis();
mode = 1;
}
}
}
// white staging light
if (mode == 1)
{
digitalWrite(wledPin, HIGH);
if (millis() - timer >= whiteInterval)
{
digitalWrite(wledPin, LOW);
timer = millis ();
mode = 2;
}
}
// yellow light #1
if (mode == 2)
{
digitalWrite(y1ledPin, HIGH);
if (millis() - timer >= yellowInterval)
{
digitalWrite(y1ledPin, LOW);
timer = millis();
mode = 3;
}
// left red light
if (digitalRead(lPedalButtonPin) == LOW)
{
digitalWrite(y1ledPin, LOW);
digitalWrite(rLeftLedPin, HIGH);
}
if (digitalRead(rPedalButtonPin) == LOW)
{
digitalWrite(y1ledPin, LOW);
digitalWrite(rRightLedPin, HIGH);
}
}
// yellow light #2
if (mode == 3)
{
digitalWrite(y2ledPin, HIGH);
if (millis() - timer >= yellowInterval)
{
digitalWrite(y2ledPin, LOW);
timer = millis();
mode = 4;
}
// left red light
if (digitalRead(lPedalButtonPin) == LOW)
{
digitalWrite(y2ledPin, LOW);
digitalWrite(rLeftLedPin, HIGH);
}
if (digitalRead(rPedalButtonPin) == LOW)
{
digitalWrite(y2ledPin, LOW);
digitalWrite(rRightLedPin, HIGH);
}
}
// yellow light #3
if (mode == 4)
{
digitalWrite(y3ledPin, HIGH);
if (millis() - timer >= yellowInterval)
{
digitalWrite(y3ledPin, LOW);
timer = millis();
mode = 5;
}
// left red light
if (digitalRead(lPedalButtonPin) == LOW)
{
digitalWrite(y3ledPin, LOW);
digitalWrite(rLeftLedPin, HIGH);
}
if (digitalRead(rPedalButtonPin) == LOW)
{
digitalWrite(y3ledPin, LOW);
digitalWrite(rRightLedPin, HIGH);
}
}
// green lights
if (mode == 5)
{
//if(digitalRead(lPedalButtonPin) == LOW)
//{
digitalWrite(gLeftLedPin, HIGH);
mode = 0;
//}
//if(digitalRead(rPedalButtonPin) == LOW)
//{
digitalWrite(gRightLedPin, HIGH);
mode = 0;
//}
}
}