#include <Ramp.h> // Include ramp library
const int RED_1 = 2;
const int GREEN_1 = 3;
const int BLUE_1 = 4;
const int RED_2 = 14;
const int GREEN_2 = 15;
const int BLUE_2 = 16;
const int RED_3 = 5;
const int GREEN_3 = 6;
const int BLUE_3 = 7;
const int RED_4 = 8;
const int GREEN_4 = 9;
const int BLUE_4 = 10;
const int RED_5 = 11;
const int GREEN_5 = 12;
const int BLUE_5 = 13;
const int RED_6 = 44;
const int GREEN_6 = 45;
const int BLUE_6 = 46;
// Change color values here:
int white[] = {255, 255, 255}; // White
int pink[] = {255, 0, 150}; // Pink (Red + Blue)
int red[] = {255, 0, 0}; // Red
int amber[] = {255, 153, 51}; // Amber (Red + Green)
int green[] = {0, 255, 0}; // Green (Green + Blue)
int teal[] = {0, 255, 128}; // Teal
int blue[] = {0, 255, 255}; // Blue (Blue + Green)
int purple[] = {150, 0, 255}; // Purple (Blue + Red)
int off[] = {0, 0, 0}; // Off
int randCol[] = {0, 0, 0}; // Variable for random color
int LED1[] = {0, 0, 0}; // Variable for current color displayed on LED 1
// int state = 0; // Variable for controlling LED 2 state
int LED3[] = {0, 0, 0}; // Variable for current color displayed on LED 3
int LED4[] = {0, 0, 0}; // Variable for current color displayed on LED 4
int LED5[] = {0, 0, 0}; // Variable for current color displayed on LED 5
int LED6[] = {0, 0, 0}; // Variable for current color displayed on LED 6
const int buttonPin = 20; // Button connected to pin 20
int buttonState = 0; // Current button state
int lastButtonState = 0; // Previous button state
const int offTime = 2000; // Button push time until turn off
unsigned long buttonPressTime; // How long the button has been pressed for
int sequence = 3; // Variable to track the current color sequence
bool skip = false; // Variable to skip the rest of a sequence
int delay_1 = 1000;
int delay_2 = 1500;
int delay_3 = delay_2 / 2;
int delay_4 = 3000;
int delay_5 = 1000;
rampInt rampRed1; // New int ramp object
rampInt rampGreen1; // New int ramp object
rampInt rampBlue1; // New int ramp object
rampInt rampRed3; // New int ramp object
rampInt rampGreen3; // New int ramp object
rampInt rampBlue3; // New int ramp object
rampInt rampRed4; // New int ramp object
rampInt rampGreen4; // New int ramp object
rampInt rampBlue4; // New int ramp object
rampInt rampRed5; // New int ramp object
rampInt rampGreen5; // New int ramp object
rampInt rampBlue5; // New int ramp object
rampInt rampRed6; // New int ramp object
rampInt rampGreen6; // New int ramp object
rampInt rampBlue6; // New int ramp object
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(RED_5, OUTPUT);
pinMode(GREEN_5, OUTPUT);
pinMode(BLUE_5, OUTPUT);
pinMode(RED_6, OUTPUT);
pinMode(GREEN_6, OUTPUT);
pinMode(BLUE_6, OUTPUT);
pinMode(buttonPin, INPUT);
randomSeed(analogRead(0)); // shuffle the random function
rampRed1.setGrain(1); // Set all ramp grain to 1
rampGreen1.setGrain(1);
rampBlue1.setGrain(1);
rampRed3.setGrain(1);
rampGreen3.setGrain(1);
rampBlue3.setGrain(1);
rampRed4.setGrain(1);
rampGreen4.setGrain(1);
rampBlue4.setGrain(1);
rampRed5.setGrain(1);
rampGreen5.setGrain(1);
rampBlue5.setGrain(1);
rampRed6.setGrain(1);
rampGreen6.setGrain(1);
rampBlue6.setGrain(1);
}
void setLED1(int color[], unsigned long duration) {
rampRed1.go(LED1[0]);
rampGreen1.go(LED1[1]);
rampBlue1.go(LED1[2]);
rampRed1.go(color[0], duration, LINEAR);
rampGreen1.go(color[1], duration, LINEAR);
rampBlue1.go(color[2], duration, LINEAR);
}
void setLED2(int state) {
if (state == 1) {
analogWrite(RED_2, HIGH);
analogWrite(GREEN_2, HIGH);
analogWrite(BLUE_2, HIGH);
} else if (state == 0) {
analogWrite(RED_2, LOW);
analogWrite(GREEN_2, LOW);
analogWrite(BLUE_2, LOW);
}
}
void setLED3(int color[], unsigned long duration) {
rampRed3.go(LED3[0]);
rampGreen3.go(LED3[1]);
rampBlue3.go(LED3[2]);
rampRed3.go(color[0], duration, LINEAR);
rampGreen3.go(color[1], duration, LINEAR);
rampBlue3.go(color[2], duration, LINEAR);
}
void setLED4(int color[], unsigned long duration) {
rampRed4.go(LED4[0]);
rampGreen4.go(LED4[1]);
rampBlue4.go(LED4[2]);
rampRed4.go(color[0], duration, LINEAR);
rampGreen4.go(color[1], duration, LINEAR);
rampBlue4.go(color[2], duration, LINEAR);
}
void setLED5(int color[], unsigned long duration) {
rampRed5.go(LED5[0]);
rampGreen5.go(LED5[1]);
rampBlue5.go(LED5[2]);
rampRed5.go(color[0], duration, LINEAR);
rampGreen5.go(color[1], duration, LINEAR);
rampBlue5.go(color[2], duration, LINEAR);
}
void setLED6(int color[], unsigned long duration) {
rampRed6.go(LED6[0]);
rampGreen6.go(LED6[1]);
rampBlue6.go(LED6[2]);
rampRed6.go(color[0], duration, LINEAR);
rampGreen6.go(color[1], duration, LINEAR);
rampBlue6.go(color[2], duration, LINEAR);
}
/*
void setColor(int color[], int redPin, int greenPin, int bluePin) {
analogWrite(redPin, color[0]);
analogWrite(greenPin, color[1]);
analogWrite(bluePin, color[2]);
}
*/
void setRandomRed(int redPin, int greenPin, int bluePin) {
analogWrite(redPin, 255);
analogWrite(greenPin, 0);
analogWrite(bluePin, random(255));
}
void setRandomOrange(int redPin, int greenPin, int bluePin) {
analogWrite(redPin, 255);
analogWrite(greenPin, random(255));
analogWrite(bluePin, 0);
}
void setRandomGreen(int redPin, int greenPin, int bluePin) {
analogWrite(redPin, 0);
analogWrite(greenPin, 255);
analogWrite(bluePin, random(255));
}
void setRandomBlue(int redPin, int greenPin, int bluePin) {
analogWrite(redPin, 0);
analogWrite(greenPin, random(255));
analogWrite(bluePin, 255);
}
void setRandomPurple(int redPin, int greenPin, int bluePin) {
analogWrite(redPin, random(255));
analogWrite(greenPin, 0);
analogWrite(bluePin, 255);
}
void myRamp(unsigned long duration) {
unsigned long start = millis();
while (millis() - start <= duration && skip == false) {
checkButton(); // check the buttons
LED1[0] = rampRed1.update();
LED1[1] = rampGreen1.update();
LED1[2] = rampBlue1.update();
LED3[0] = rampRed3.update();
LED3[1] = rampGreen3.update();
LED3[2] = rampBlue3.update();
LED4[0] = rampRed4.update();
LED4[1] = rampGreen4.update();
LED4[2] = rampBlue4.update();
LED5[0] = rampRed5.update();
LED5[1] = rampGreen5.update();
LED5[2] = rampBlue5.update();
LED6[0] = rampRed6.update();
LED6[1] = rampGreen6.update();
LED6[2] = rampBlue6.update();
analogWrite(RED_1, LED1[0]);
analogWrite(GREEN_1, LED1[1]);
analogWrite(BLUE_1, LED1[2]);
analogWrite(RED_3, LED3[0]);
analogWrite(GREEN_3, LED3[1]);
analogWrite(BLUE_3, LED3[2]);
analogWrite(RED_4, LED4[0]);
analogWrite(GREEN_4, LED4[1]);
analogWrite(BLUE_4, LED4[2]);
analogWrite(RED_5, LED5[0]);
analogWrite(GREEN_5, LED5[1]);
analogWrite(BLUE_5, LED5[2]);
analogWrite(RED_6, LED6[0]);
analogWrite(GREEN_6, LED6[1]);
analogWrite(BLUE_6, LED6[2]);
}
}
void myDelay(unsigned long duration) {
unsigned long start = millis();
while (millis() - start <= duration && skip == false) {
checkButton(); // check the buttons
}
}
void checkButton() { // Keep checking the button
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) { // if the button state has changed...
if (buttonState == HIGH) { // if the current state is HIGH then the button went from off to on
//Serial.println("Pressed");
buttonPressTime = millis(); // restart the timer
while (buttonState == HIGH && millis() - buttonPressTime < offTime) {
buttonState = digitalRead(buttonPin); // while the button is held, keep reading the pin
//Serial.println("waiting..."); // while the button is held, do nothing
}
// once the button has been released, or the offTime has been reached...
if (buttonState == HIGH) { // if the button is still being pressed, go to sequence 0
sequence = 0;
} else { // if the button has been realeased, cycle the sequence
if (sequence >= 4) { // if it is sequence 4, reset to sequence 1
sequence = 1;
} else { // if it is not sequence 4, go to next sequence
sequence++;
}
skip = true; // if the sequence has changed, skip to the next sequence
}
//Serial.print("Sequence:");
//Serial.println(sequence);
} 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 0: // All off
skip = false;
setLED1(off, 0);
setLED2(0);
setLED3(off, 0);
setLED4(off, 0);
setLED5(off, 0);
setLED6(off, 0);
myDelay(10000);
break;
case 1:
skip = false;
setLED1(off, 0);
setLED2(0);
setLED3(off, 0);
setLED4(off, 0);
setLED5(off, 0);
setLED6(off, 0);
myDelay(delay_2);
setLED1(pink, 0);
myDelay(delay_2);
setLED2(1);
myDelay(delay_2);
setLED3(blue, 0);
setRandomRed(RED_4, GREEN_4, BLUE_4);
setRandomGreen(RED_5, GREEN_5, BLUE_5);
setRandomPurple(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomOrange(RED_4, GREEN_4, BLUE_4);
setRandomBlue(RED_5, GREEN_5, BLUE_5);
setRandomRed(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomGreen(RED_4, GREEN_4, BLUE_4);
setRandomPurple(RED_5, GREEN_5, BLUE_5);
setRandomOrange(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomBlue(RED_4, GREEN_4, BLUE_4);
setRandomRed(RED_5, GREEN_5, BLUE_5);
setRandomGreen(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomPurple(RED_4, GREEN_4, BLUE_4);
setRandomOrange(RED_5, GREEN_5, BLUE_5);
setRandomBlue(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomRed(RED_4, GREEN_4, BLUE_4);
setRandomGreen(RED_5, GREEN_5, BLUE_5);
setRandomPurple(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomOrange(RED_4, GREEN_4, BLUE_4);
setRandomBlue(RED_5, GREEN_5, BLUE_5);
setRandomRed(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomGreen(RED_4, GREEN_4, BLUE_4);
setRandomPurple(RED_5, GREEN_5, BLUE_5);
setRandomOrange(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomBlue(RED_4, GREEN_4, BLUE_4);
setRandomRed(RED_5, GREEN_5, BLUE_5);
setRandomGreen(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomPurple(RED_4, GREEN_4, BLUE_4);
setRandomOrange(RED_5, GREEN_5, BLUE_5);
setRandomBlue(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setLED1(off, 0);
setLED2(0);
setLED3(off, 0);
setLED4(off, 0);
setLED5(off, 0);
setLED6(off, 0);
myDelay(delay_2);
setLED1(blue, 0);
myDelay(delay_2);
setLED2(1);
myDelay(delay_2);
setLED3(pink, 0);
setRandomRed(RED_4, GREEN_4, BLUE_4);
setRandomGreen(RED_5, GREEN_5, BLUE_5);
setRandomPurple(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomOrange(RED_4, GREEN_4, BLUE_4);
setRandomBlue(RED_5, GREEN_5, BLUE_5);
setRandomRed(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomGreen(RED_4, GREEN_4, BLUE_4);
setRandomPurple(RED_5, GREEN_5, BLUE_5);
setRandomOrange(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomBlue(RED_4, GREEN_4, BLUE_4);
setRandomRed(RED_5, GREEN_5, BLUE_5);
setRandomGreen(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomPurple(RED_4, GREEN_4, BLUE_4);
setRandomOrange(RED_5, GREEN_5, BLUE_5);
setRandomBlue(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomRed(RED_4, GREEN_4, BLUE_4);
setRandomGreen(RED_5, GREEN_5, BLUE_5);
setRandomPurple(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomOrange(RED_4, GREEN_4, BLUE_4);
setRandomBlue(RED_5, GREEN_5, BLUE_5);
setRandomRed(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomGreen(RED_4, GREEN_4, BLUE_4);
setRandomPurple(RED_5, GREEN_5, BLUE_5);
setRandomOrange(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomBlue(RED_4, GREEN_4, BLUE_4);
setRandomRed(RED_5, GREEN_5, BLUE_5);
setRandomGreen(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
setRandomPurple(RED_4, GREEN_4, BLUE_4);
setRandomOrange(RED_5, GREEN_5, BLUE_5);
setRandomBlue(RED_6, GREEN_6, BLUE_6);
myDelay(delay_3);
break;
case 2:
skip = false;
setLED1(off, 0);
setLED2(0);
setLED3(off, 0);
setLED4(off, 0);
setLED5(off, 0);
setLED6(off, 0);
myDelay(delay_1);
setRandomRed(RED_1, GREEN_1, BLUE_1);
myDelay(delay_1);
setLED2(1);
myDelay(delay_1);
setRandomGreen(RED_3, GREEN_3, BLUE_3);
myDelay(delay_1);
setRandomOrange(RED_4, GREEN_4, BLUE_4);
myDelay(delay_1);
setRandomBlue(RED_5, GREEN_5, BLUE_5);
myDelay(delay_1);
setRandomPurple(RED_6, GREEN_6, BLUE_6);
myDelay(delay_1);
setLED1(off, 0);
setLED2(0);
setLED3(off, 0);
setLED4(off, 0);
setLED5(off, 0);
setLED6(off, 0);
myDelay(delay_1);
setRandomGreen(RED_1, GREEN_1, BLUE_1);
myDelay(delay_1);
setLED2(1);
myDelay(delay_1);
setRandomOrange(RED_3, GREEN_3, BLUE_3);
myDelay(delay_1);
setRandomBlue(RED_4, GREEN_4, BLUE_4);
myDelay(delay_1);
setRandomPurple(RED_5, GREEN_5, BLUE_5);
myDelay(delay_1);
setRandomRed(RED_6, GREEN_6, BLUE_6);
myDelay(delay_1);
setLED1(off, 0);
setLED2(0);
setLED3(off, 0);
setLED4(off, 0);
setLED5(off, 0);
setLED6(off, 0);
myDelay(delay_1);
setRandomBlue(RED_1, GREEN_1, BLUE_1);
myDelay(delay_1);
setLED2(1);
myDelay(delay_1);
setRandomPurple(RED_3, GREEN_3, BLUE_3);
myDelay(delay_1);
setRandomGreen(RED_4, GREEN_4, BLUE_4);
myDelay(delay_1);
setRandomRed(RED_5, GREEN_5, BLUE_5);
myDelay(delay_1);
setRandomOrange(RED_6, GREEN_6, BLUE_6);
myDelay(delay_1);
break;
case 3:
skip = false;
setLED1(pink, delay_5);
setLED2(1);
setLED3(off, 0);
setLED4(off, 0);
setLED5(off, 0);
setLED6(off, 0);
myRamp(delay_4);
setLED1(amber, delay_5);
myRamp(delay_4);
setLED1(purple, delay_5);
myRamp(delay_4);
setLED1(blue, delay_5);
myRamp(delay_4);
setLED1(green, delay_5);
myRamp(delay_4);
break;
case 4:
skip = false;
setLED1(blue, 0);
setLED2(1);
setLED3(off, 0);
setLED4(off, 0);
setLED5(off, 0);
setLED6(off, 0);
myDelay(delay_1);
break;
}
}