#include <FastLED.h>
// Define the number of LEDs in each ring
#define LED_COUNT_1 1
#define LED_COUNT_8 8
#define LED_COUNT_12 12
#define LED_COUNT_16 16
// Define the digital I/O pins for the data lines
#define DATA_PIN_1 2
#define DATA_PIN_8 3
#define DATA_PIN_12 4
#define DATA_PIN_16 5
// Define the array of LEDs for each ring
CRGB leds_1[LED_COUNT_1];
CRGB leds_8[LED_COUNT_8];
CRGB leds_12[LED_COUNT_12];
CRGB leds_16[LED_COUNT_16];
// Speed adjustment (higher value = slower animation)
unsigned int speedAdjustment = 10; // Adjust this value to change the speed
// Initialize LED pins
int redPin = 9;
int greenPin = 10;
int bluePin = 11;
void setup() {
FastLED.addLeds<WS2812B, DATA_PIN_1, GRB>(leds_1, LED_COUNT_1);
FastLED.addLeds<WS2812B, DATA_PIN_8, GRB>(leds_8, LED_COUNT_8);
FastLED.addLeds<WS2812B, DATA_PIN_12, GRB>(leds_12, LED_COUNT_12);
FastLED.addLeds<WS2812B, DATA_PIN_16, GRB>(leds_16, LED_COUNT_16);
// Set the first ring to bright yellow and show it
leds_1[0] = CRGB::Yellow; // Set to yellow color
FastLED.show();
// Set LED pins as output
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop() {
// Run a different color fade sequence for the remaining rings
fadeColor(leds_8, LED_COUNT_8, 10); // Different phase for each ring
fadeColor(leds_12, LED_COUNT_12, 3);
fadeColor(leds_16, LED_COUNT_16, 6);
// Update the LEDs (excluding the first ring, which remains yellow)
FastLED.show();
// Small delay to control the speed of the animation
delay(5);
}
void fadeColor(CRGB* leds, int count, int phaseShift) {
uint8_t hue = (millis() / speedAdjustment + phaseShift * 64) % 256; // Phase shift each ring
for (int i = 0; i < count; i++) {
leds[i] = CHSV(hue, 255, 255);
}
// Start with red at 20%, green at 20%, and blue at 100%
analogWrite(redPin, 51); // 20% of 255
analogWrite(greenPin, 51); // 20% of 255
analogWrite(bluePin, 255); // 100% of 255
// Fade blue LED from 100 to 50
for (int brightness = 255; brightness >= 50; brightness--) {
analogWrite(bluePin, brightness);
delay(10);
}
// Fade green LED from 20 to 50
for (int brightness = 51; brightness <= 127; brightness++) {
analogWrite(greenPin, brightness);
delay(10);
}
// Fade blue from 50 to 20
for (int brightness = 127; brightness >= 51; brightness--) {
analogWrite(bluePin, brightness);
delay(10);
}
// Fade red from 20 to 50
for (int brightness = 51; brightness <= 127; brightness++) {
analogWrite(redPin, brightness);
delay(10);
}
// Fade blue from 20 to 50
for (int brightness = 127; brightness <= 255; brightness++) {
analogWrite(bluePin, brightness);
delay(10);
}
// Fade green from 50 to 20
for (int brightness = 127; brightness >= 51; brightness--) {
analogWrite(greenPin, brightness);
delay(10);
}
// Fade red from 50 to 20
for (int brightness = 127; brightness >= 51; brightness--) {
analogWrite(redPin, brightness);
delay(10);
}
// Fade blue from 50 to 100
for (int brightness = 127; brightness <= 255; brightness++) {
analogWrite(bluePin, brightness);
delay(10);
}
}