April 29, 2024

Addressable LED Strip Odd Colors with Arduino | Weird Behavior

I was trying to run some test code using a strip of addressable LEDs and my Arduino, but every time I ran the program, I got odd colors and the last LED color was green. Sometimes I would get a stronger color in each LED - especially when trying to set them to all white. In my case it was Red, Green, Blue (repeating 1 time) then all the other LEDs were unlit.

Addressable LED Strip Odd Colors with Arduino | Weird Behavior — image 1

It dawned on me (later than I would have liked) that the order of values was wrong for the LED strip I was using (you can visibly see the large White diode in each white square). I had initialized my LED strip (using NeoPixel) to NEO_GRB instead of NEO_GRBW as my strip has a dedicated white LED. My major mistake here was that I thought I had a strip of WS2812B LEDs but really they were SK6812RGBW LEDs. 

 Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRBW + NEO_KHZ800);

 void setup()
 {
   strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
   strip.show();  // Turn OFF all pixels ASAP
   strip.setBrightness(MAX_BRIGHTNESS);
 }
 void loop()
 {
    auto color = strip.Color(255, 0, 0, 255); //  Optional 4th param is White
    for (int i = 0; i < strip.numPixels(); i++)
    {
      strip.setPixelColor(i, color); //  Set pixel's color (in RAM)
      strip.show();                  //  Update strip to match
      delay(50);                     //  Pause for a moment
  }
}