Here is the test code im running and a link to it on github, just incase. (i need to add code formatting to the site too it seems)
https://gist.github.com/PrawnCocktail/b1f38f65085d6e55b9fc4e45bb8dc1ed
#include <FastLED.h>
// Custom WS2812C controller using weird ass timings i just adjusted until it worked.
template<uint8_t DATA_PIN, EOrder RGB_ORDER = GRB>
class WS2812C_280us : public ClocklessController<DATA_PIN, NS(375), NS(1875), NS(750), RGB_ORDER, 0, false, 280>
{
};
#define DATA_PIN 4
#define NUM_LEDS 875
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812C_280us, DATA_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(10); // Increased brightness slightly for better visibility
fill_solid(leds, NUM_LEDS, CRGB::Black);
FastLED.show();
}
void loop() {
// Theater marquee effects
theaterChase(CRGB(127, 127, 127), 50); // White, half brightness
theaterChase(CRGB(127, 0, 0), 50); // Red, half brightness
theaterChase(CRGB(0, 0, 127), 50); // Blue, half brightness
// Rainbow effects
rainbow(10);
theaterChaseRainbow(50);
}
// Theater-marquee-style chasing lights
void theaterChase(CRGB color, int wait) {
for(int a = 0; a < 10; a++) { // Repeat 10 times
for(int b = 0; b < 3; b++) { // 'b' counts from 0 to 2
fill_solid(leds, NUM_LEDS, CRGB::Black); // Clear all pixels
// 'c' counts up from 'b' to end of strip in steps of 3
for(int c = b; c < NUM_LEDS; c += 3) {
leds[c] = color;
}
FastLED.show();
FastLED.delay(wait);
}
}
}
// Rainbow cycle along whole strip
void rainbow(int wait) {
// Hue of first pixel runs 5 complete loops through the color wheel
for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {
for(int i = 0; i < NUM_LEDS; i++) {
// Calculate hue for this pixel
int pixelHue = firstPixelHue + (i * 65536L / NUM_LEDS);
// Convert HSV to RGB and set pixel
leds[i] = CHSV(pixelHue / 256, 255, 255);
}
FastLED.show();
FastLED.delay(wait);
}
}
// Rainbow-enhanced theater marquee
void theaterChaseRainbow(int wait) {
int firstPixelHue = 0; // First pixel starts at red (hue 0)
for(int a = 0; a < 30; a++) { // Repeat 30 times
for(int b = 0; b < 3; b++) { // 'b' counts from 0 to 2
fill_solid(leds, NUM_LEDS, CRGB::Black); // Clear all pixels
// 'c' counts up from 'b' to end of strip in increments of 3
for(int c = b; c < NUM_LEDS; c += 3) {
// Calculate hue for this pixel
int hue = firstPixelHue + c * 65536L / NUM_LEDS;
leds[c] = CHSV(hue / 256, 255, 255);
}
FastLED.show();
FastLED.delay(wait);
firstPixelHue += 65536 / 90; // One cycle of color wheel over 90 frames
}
}
}