// Pin assignments from the table
const int orangeOuter = 2;
const int purpleOuterTriangle = 3;
const int redOuterTriangle = 4;
const int orangeNextOuter = 5;
const int blueOuter = 6;
const int greenMiddle = 7;
const int redNextLayer = 8;
const int purpleInner = 9;
const int blueInner = 10;
const int orangeInner = 11;
const int redInnermost = 12;
const int purpleInnermost = 13;
const int blueInnermost = 22;
const int rgbPins[] = {44, 45, 46}; // RGB LED Pins
// Timing variables
unsigned long previousMillis = 0;
const long interval = 1000; // Interval for effects in milliseconds
void setup() {
// Set all pins as outputs
pinMode(orangeOuter, OUTPUT);
pinMode(purpleOuterTriangle, OUTPUT);
pinMode(redOuterTriangle, OUTPUT);
pinMode(orangeNextOuter, OUTPUT);
pinMode(blueOuter, OUTPUT);
pinMode(greenMiddle, OUTPUT);
pinMode(redNextLayer, OUTPUT);
pinMode(purpleInner, OUTPUT);
pinMode(blueInner, OUTPUT);
pinMode(orangeInner, OUTPUT);
pinMode(redInnermost, OUTPUT);
pinMode(purpleInnermost, OUTPUT);
pinMode(blueInnermost, OUTPUT);
for (int i = 0; i < 3; i++) {
pinMode(rgbPins[i], OUTPUT);
}
}
void loop() {
// Layer 1: Orange outer layer (steady glow)
digitalWrite(orangeOuter, HIGH);
// Layer 2: Purple outer triangle (pulse effect)
pulseEffect(purpleOuterTriangle);
// Layer 3: Red outer triangle below purple (fast blinking)
blinkEffect(redOuterTriangle, 200); // Fast blink
// Layer 4: Next outer layer orange (slow fade)
fadeEffect(orangeNextOuter, 2000); // Slow fade
// Layer 5: Outer layer blue (slow glow)
glowEffect(blueOuter, 1500); // Slow glow
// Layer 6: Middle green layer (quick blinking)
blinkEffect(greenMiddle, 500); // Quick blink
// Layer 7: Next red layer (rapid flashing)
blinkEffect(redNextLayer, 100); // Rapid flash
// Layer 8: Purple inner layer (pulse effect)
pulseEffect(purpleInner);
// Layer 9: Blue inner layer (glow effect)
glowEffect(blueInner, 1500);
// Layer 10: Orange inner layer (soft fade)
fadeEffect(orangeInner, 2000);
// Layer 11: Innermost red layer (blink or alternate flash)
blinkEffect(redInnermost, 500); // Blink or flash
// Layer 12: Innermost purple layer (pulse or fade)
pulseEffect(purpleInnermost);
// Layer 13: Innermost blue layer (glow or strobe)
blinkEffect(blueInnermost, 250); // Strobe effect
// Layer 14: RGB center layer (dynamic transitions)
rgbTransition(rgbPins);
}
void blinkEffect(int pin, int delayTime) {
digitalWrite(pin, HIGH);
delay(delayTime);
digitalWrite(pin, LOW);
delay(delayTime);
}
void fadeEffect(int pin, int duration) {
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(pin, brightness);
delay(duration / 255);
}
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(pin, brightness);
delay(duration / 255);
}
}
void pulseEffect(int pin) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
int state = digitalRead(pin);
digitalWrite(pin, !state); // Toggle pin state
}
}
void glowEffect(int pin, int duration) {
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(pin, brightness);
delay(duration / 255);
}
}
void rgbTransition(const int rgbPins[]) {
for (int i = 0; i < 256; i++) {
analogWrite(rgbPins[0], i); // Red
analogWrite(rgbPins[1], 255 - i); // Green
analogWrite(rgbPins[2], (i + 128) % 256); // Blue
delay(10);
}
}