I’m having some issues whereby if I power the matrix and PCB from the USB port, and draw too many bright pixels, I’ll get a brownout.
FastLED has a feature where you can set a power limit, and it scans the pixel array and does a power draw calc, then scales total brightness back to compensate.
I could do this manually each frame, but wondering if there’s any support I’ve overlooked or if its been done before!
Experimentally, I came up with these values that get me close. Then I scale brightness back enough to hit the power budget. Of course it’s important to do this BEFORE you flip the back buffer
// EstimatePowerDraw
//
// Estimate the total power load for the board and matrix by walking the pixels and adding our previously measured
// power draw per pixel based on what color and brightness each pixel is
int EstimatePowerDraw()
{
constexpr auto kBaseLoad = 1500; // Experimentally derived values
constexpr auto mwPerPixelRed = 4.10f;
constexpr auto mwPerPixelGreen = 0.82f;
constexpr auto mwPerPixelBlue = 1.75f;
float totalPower = kBaseLoad;
for (int i = 0; i < NUM_LEDS; i++)
{
const auto pixel = leds[i];
totalPower += pixel.r * mwPerPixelRed / 255.0f;
totalPower += pixel.g * mwPerPixelGreen / 255.0f;
totalPower += pixel.b * mwPerPixelBlue / 255.0f;
}
return (int) totalPower;
}