const int RED_1 = 2;
const int GREEN_1 = 3;
const int BLUE_1 = 4;
const int RED_2 = 5;
const int GREEN_2 = 6;
const int BLUE_2 = 7;
const int RED_3 = 8;
const int GREEN_3 = 9;
const int BLUE_3 = 10;
const int RED_4 = 11;
const int GREEN_4 = 12;
const int BLUE_4 = 13;
// Change color values here:
int white[] = {255, 255, 255}; // White
int pink[] = {255, 0, 255}; // Pink
int red[] = {255, 0, 0}; // Red
int amber[] = {255, 153, 51}; // Amber
int green[] = {0, 255, 0}; // Green
int teal[] = {0, 255, 128}; // Teal
int blue[] = {0, 255, 255}; // Blue
int purple[] = {178, 102, 255}; // Purple
int off[] = {0, 0, 0}; // Off
int delay250 = 250; // Delay time in milliseconds
int delay500 = 500; // Delay time in milliseconds
int delay1000 = 1000; // Delay time in milliseconds
int delay2000 = 2000; // Delay time in milliseconds
const int buttonPin = A0; // Connect your push button to analog pin A0
int buttonState = 0; // Current button state
int lastButtonState = 0; // Previous button state
int sequence = 1; // Variable to track the current color sequence
bool skip = false; // Variable to skip the rest of a sequence
void setup() {
Serial.begin(9600);
pinMode(RED_1, OUTPUT);
pinMode(GREEN_1, OUTPUT);
pinMode(BLUE_1, OUTPUT);
pinMode(RED_2, OUTPUT);
pinMode(GREEN_2, OUTPUT);
pinMode(BLUE_2, OUTPUT);
pinMode(RED_3, OUTPUT);
pinMode(GREEN_3, OUTPUT);
pinMode(BLUE_3, OUTPUT);
pinMode(RED_4, OUTPUT);
pinMode(GREEN_4, OUTPUT);
pinMode(BLUE_4, OUTPUT);
pinMode(buttonPin, INPUT);
}
void myDelay(unsigned long duration) {
unsigned long start = millis();
while (millis() - start <= duration && skip == false) {
checkButton(); // check the buttons
}
}
void checkButton() {
// Read the state of the button
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
// if the current state is HIGH then the button went from off to on:
//Serial.println("on");
// if it is sequence 4, reset to sequence 1
if (sequence >= 4) {
sequence = 1;
// if it is not sequence 4, go to next sequence
} else {
sequence++;
}
//Serial.print("Sequence:");
//Serial.println(sequence);
skip = true;
//delay(400);
} else {
// if the current state is LOW then the button went from on to off:
//Serial.println("off");
}
delay(50);
}
lastButtonState = buttonState;
}
void loop() {
switch (sequence) {
case 1:
setColor(pink, RED_1, GREEN_1, BLUE_1);
setColor(off, RED_2, GREEN_2, BLUE_2);
setColor(off, RED_3, GREEN_3, BLUE_3);
setColor(off, RED_4, GREEN_4, BLUE_4);
myDelay(delay2000);
setColor(pink, RED_2, GREEN_2, BLUE_2);
myDelay(delay2000);
setColor(amber, RED_3, GREEN_3, BLUE_3);
setColor(green, RED_4, GREEN_4, BLUE_4);
myDelay(delay250);
setColor(green, RED_3, GREEN_3, BLUE_3);
setColor(blue, RED_4, GREEN_4, BLUE_4);
myDelay(delay250);
setColor(blue, RED_3, GREEN_3, BLUE_3);
setColor(purple, RED_4, GREEN_4, BLUE_4);
myDelay(delay250);
setColor(purple, RED_3, GREEN_3, BLUE_3);
setColor(amber, RED_4, GREEN_4, BLUE_4);
myDelay(delay250);
setColor(amber, RED_3, GREEN_3, BLUE_3);
setColor(green, RED_4, GREEN_4, BLUE_4);
myDelay(delay250);
setColor(green, RED_3, GREEN_3, BLUE_3);
setColor(blue, RED_4, GREEN_4, BLUE_4);
myDelay(delay250);
setColor(blue, RED_3, GREEN_3, BLUE_3);
setColor(purple, RED_4, GREEN_4, BLUE_4);
myDelay(delay250);
setColor(purple, RED_3, GREEN_3, BLUE_3);
setColor(amber, RED_4, GREEN_4, BLUE_4);
myDelay(delay250);
setColor(off, RED_1, GREEN_1, BLUE_1);
setColor(off, RED_2, GREEN_2, BLUE_2);
setColor(off, RED_3, GREEN_3, BLUE_3);
setColor(off, RED_4, GREEN_4, BLUE_4);
myDelay(delay2000);
skip = false;
break;
case 2:
setColor(blue, RED_1, GREEN_1, BLUE_1);
setColor(blue, RED_2, GREEN_2, BLUE_2);
setColor(pink, RED_3, GREEN_3, BLUE_3);
setColor(green, RED_4, GREEN_4, BLUE_4);
myDelay(delay250);
skip = false;
break;
case 3:
setColor(white, RED_1, GREEN_1, BLUE_1);
setColor(white, RED_2, GREEN_2, BLUE_2);
setColor(white, RED_3, GREEN_3, BLUE_3);
setColor(off, RED_4, GREEN_4, BLUE_4);
myDelay(delay250);
skip = false;
break;
case 4:
setColor(white, RED_1, GREEN_1, BLUE_1);
setColor(white, RED_2, GREEN_2, BLUE_2);
setColor(white, RED_3, GREEN_3, BLUE_3);
setColor(white, RED_4, GREEN_4, BLUE_4);
myDelay(delay250);
skip = false;
break;
}
}
void setColor(int color[], int redPin, int greenPin, int bluePin) {
analogWrite(redPin, color[0]);
analogWrite(greenPin, color[1]);
analogWrite(bluePin, color[2]);
}