// Array to hold the pin numbers for R, G, B channels
int ledPins[3] = {9, 10, 11}; // PWM-capable pins
int ledPins_2[3] = {3, 5, 6};
// 2D array to hold multiple colors (10 colors in this case)
int colors[10][3] = {
{0, 204, 255}, // cyan
{255, 204, 0}, // yellow
{153, 51, 255}, // violet
{255, 102, 255}, // pink
{255, 255, 255}, // white
{255, 255, 255}, // white (repeated)
{0, 0, 255}, // blue
{153, 51, 255}, // rose
{0, 204, 0}, // green
{255, 0, 0} // red
};
// Define the pin for the button
const int buttonPin = 2; // Button pin
int currentPattern = 0; // Current pattern index
void setup() {
// Set each pin as output
for (int i = 0; i < 3; i++) {
pinMode(ledPins[i], OUTPUT);
pinMode(ledPins_2[i], OUTPUT);
}
pinMode(buttonPin, INPUT_PULLUP); // Set the button pin as input with pull-up resistor
}
void loop() {
// Check button press to change patterns
if (digitalRead(buttonPin) == LOW) {
currentPattern = (currentPattern + 1) % 3; // Change pattern (0, 1, 2)
delay(1000); // Debounce delay
}
// Execute the selected pattern
switch (currentPattern) {
case 0:
pattern1();
break;
case 1:
pattern2();
break;
case 2:
pattern3();
break;
}
}
void setColor(int color1[3], int color2[3]) {
// Write the corresponding PWM values to the pins
for (int i = 0; i < 3; i++) {
analogWrite(ledPins[i], 255 - color1[i]);
analogWrite(ledPins_2[i], 255 - color2[i]); // For common anode, invert PWM value
}
}
// Define pattern functions
void pattern1() {
for (int i = 0; i < 10; i++) { // Loop through colors
setColor(colors[i], colors[9 - i]);
delay(2000); // Wait before changing color
}
}
void pattern2() {
for (int i = 0; i < 10; i++) { // Loop through colors with a different effect
setColor(colors[i], colors[i+1]);
delay(100); // Wait before changing color
}
}
void pattern3() {
for (int i = 0; i < 10; i++) { // Loop through colors with another effect
setColor(colors[(i + 2) % 10], colors[i + 5]);
delay(5000); // Wait before changing color
}
}