#include <FastLED.h>
#define NUM_LEDS 64
#define DATA_PIN 3
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
// Define three colors to transition between
CHSV color1 = CHSV(0, 255, 255); // Red
CHSV color2 = CHSV(96, 255, 255); // Green
CHSV color3 = CHSV(200, 255, 255); // Blue
#define TRANSITION_TIME 5000
unsigned long startTime;
void setup() {
FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.setBrightness(150);
startTime = millis();
}
void loop() {
unsigned long elapsedTime = millis() - startTime;
// Compute blend amount between three colors (corrected variable name)
float blendFactor = fmod((float)elapsedTime / TRANSITION_TIME, 1.0);
int stage = (elapsedTime / TRANSITION_TIME) % 3; // Determines which two colors to blend
CHSV startColor, endColor;
if (stage == 0) {
startColor = color1;
endColor = color2;
} else if (stage == 1) {
startColor = color2;
endColor = color3;
} else {
startColor = color3;
endColor = color1;
}
for (int i = 0; i < NUM_LEDS; i++) {
float positionFactor = (float)i / NUM_LEDS; // Determines how much of the strip is blended
CHSV blendedColor = blend(startColor, endColor, positionFactor * blendFactor * 255);
leds[i] = blendedColor;
}
FastLED.show();
delay(50);
// Slowly rotate hues to keep colors evolving (fully written)
EVERY_N_SECONDS(8) {
color1.hue += 10;
color2.hue += 10;
color3.hue += 10;
}
}