const byte leftLEDs[3] = {11, 10, 9};
const byte rightLEDs[3] = {6, 5, 3};
const byte allLEDs[6] = {11, 10, 9, 6, 5, 3};
const byte buttonPin = 2;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(0));
for (int i = 0; i < 3; i++)
{
pinMode(leftLEDs[i], OUTPUT);
pinMode(rightLEDs[i], OUTPUT);
}
pinMode(buttonPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(buttonPin), buttonHandler, FALLING);
}
bool interrupted = false;
void buttonHandler()
{
if (!interrupted)
{
interrupted = true;
Serial.println("Interrupted");
}
}
void Fading()
{
for (int level = 0; level <= 255; level++)
{
for (int i = 0; i < 3; i++)
{
analogWrite(leftLEDs[i], level);
analogWrite(rightLEDs[i], level);
}
delay(10);
}
delay(2000);
for (int level = 255; level >= 0; level--)
{
for (int i = 0; i < 3; i++)
{
analogWrite(leftLEDs[i], level);
analogWrite(rightLEDs[i], level);
}
delay(10);
}
}
void Running_Lights_1_Forward()
{
for (int i = 0; i < 3; i++)
{
for (int level = 0; level <= 255; level++)
{
analogWrite(leftLEDs[i], level);
analogWrite(rightLEDs[i], level);
delay(3);
}
}
for (int i = 0; i < 3; i++)
{
for (int level = 255; level >= 0; level--)
{
analogWrite(leftLEDs[i], level);
analogWrite(rightLEDs[i], level);
delay(3);
}
}
}
void Running_Lights_1_Backward()
{
for (int i = 2; i >= 0; i--)
{
for (int level = 0; level <= 255; level++)
{
analogWrite(leftLEDs[i], level);
analogWrite(rightLEDs[i], level);
delay(3);
}
}
for (int i = 2; i >= 0; i--)
{
for (int level = 255; level >= 0; level--)
{
analogWrite(leftLEDs[i], level);
analogWrite(rightLEDs[i], level);
delay(3);
}
}
}
void Running_Lights_2_Forward()
{
for (int i = 0; i < 3; i++)
{
for (int level = 0; level <= 255; level++)
{
analogWrite(leftLEDs[i], level);
analogWrite(rightLEDs[i], level);
delay(3);
}
for (int level = 255; level >= 0; level--)
{
analogWrite(leftLEDs[i], level);
analogWrite(rightLEDs[i], level);
delay(3);
}
}
}
void Running_Lights_2_Backward()
{
for (int i = 2; i >= 0; i--)
{
for (int level = 0; level <= 255; level++)
{
analogWrite(leftLEDs[i], level);
analogWrite(rightLEDs[i], level);
delay(3);
}
for (int level = 255; level >= 0; level--)
{
analogWrite(leftLEDs[i], level);
analogWrite(rightLEDs[i], level);
delay(3);
}
}
}
void Random_Lightning()
{
int LED_number = random(6);
digitalWrite(allLEDs[LED_number], HIGH);
delay(500);
digitalWrite(allLEDs[LED_number], LOW);
}
void Static_Light()
{
for (int i = 0; i < 6; i++)
{
digitalWrite(allLEDs[i], HIGH);
}
}
void Glimmering()
{
for (int i = 0; i < 6; i++)
{
int random_level = random(100, 256);
analogWrite(allLEDs[i], random_level);
delay(10);
}
}
int mode = 1;
void changeMode()
{
if (mode < 8)
{
mode++;
}
else if (mode == 8)
{
mode = 1;
}
}
void loop() {
if (interrupted)
{
noInterrupts();
changeMode();
Serial.println(mode);
interrupted = false;
interrupts();
}
switch (mode)
{
case 1:
Fading();
break;
case 2:
Running_Lights_1_Forward();
break;
case 3:
Running_Lights_1_Backward();
break;
case 4:
Running_Lights_2_Forward();
break;
case 5:
Running_Lights_2_Backward();
break;
case 6:
Random_Lightning();
break;
case 7:
Static_Light();
break;
case 8:
Glimmering();
break;
}
}