I'm working on a project that will eventually scale to 864 LEDs on WS2815 LED strips (three rows of 288 LEDs). I'm currently running it on an Arduino Uno with a single test strip of 144 LEDs.
FastLED stores its data in 3-byte structs, so I obviously cannot simply hold all of the data in SRAM and work with it directly (at least not without upgrading to a controller with more memory). I'm going to use a Raspberry Pi to send the Arduino data, one section at a time. To further save memory, I want to implement an RGB color lookup table in flash, then instead of
CRGB pixels[PIXEL_COUNT];
taking up over 2KiB of memory 800+ values, or
CRGB pixels[PIXEL_BUFFER_COUNT];
with a buffer of 288 RGB values consuming most of my working memory (864 bytes), I would have
CRGB *pixels[PIXEL_BUFFER_COUNT];
Where each pointer would reference a location in a PROGMEM
256-entry table of CRGB
values. This is a more manageable 576 bytes in SRAM.
I realize FastLED does not work this way. There's a lot of work ahead of me if I do this, but before I get started, my question:
Will I run into issues with reading the actual data from flash memory while sending to the LED strips? As currently implemented in FastLED, RGB data is in SRAM, but each pointer dereference will require reading from flash. Is the subsequent delay enough that it will cause an issue with sending data to the strips?