#include <FastLED.h>
// Matrix size
#define NUM_ROWS 1
#define NUM_COLS (16 + 8)
#define NUM_LEDS (NUM_ROWS * NUM_COLS)
// LED settings
#define DATA_PIN 0
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define BRIGHTNESS 255
CRGB leds[NUM_LEDS];
// ---- MULTI COLOR COMETS ----
const uint8_t NUM_COMETS = 9;
uint8_t cometPos[NUM_COMETS];
uint8_t cometSpeed = 1;
uint8_t fadeAmount = 35;
// Fixed comet colors
CRGB cometColor[NUM_COMETS] = {
CRGB::Red, // 1
CRGB::Orange, // 2
CRGB::Yellow, // 3
CRGB::Green, // 4
CRGB::Blue, // 5
CRGB::Purple, // 6
CRGB::DeepPink, // 7
CRGB::Cyan, // 8
CRGB::White // 9
};
void setup() {
FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
// Spread comets evenly along the strip
for (uint8_t i = 0; i < NUM_COMETS; i++) {
cometPos[i] = (NUM_LEDS / NUM_COMETS) * i;
}
}
void loop() {
// Burn / fade tail
fadeToBlackBy(leds, NUM_LEDS, fadeAmount);
for (uint8_t i = 0; i < NUM_COMETS; i++) {
// Flicker creates fire-like shimmer
uint8_t flicker = random8(40);
CRGB c = cometColor[i];
c.nscale8(255 - flicker); // brightness flicker
leds[cometPos[i]] = c;
// Move comet
cometPos[i] += cometSpeed;
if (cometPos[i] >= NUM_LEDS)
cometPos[i] %= NUM_LEDS;
}
FastLED.show();
delay(25);
}
FPS: 0
Power: 0.00W
Power: 0.00W