5#define FASTLED_INTERNAL
31static const uint8_t gRed_mW = 16 * 5;
32static const uint8_t gGreen_mW = 11 * 5;
33static const uint8_t gBlue_mW = 15 * 5;
34static const uint8_t gDark_mW = 1 * 5;
52#define POWER_DEBUG_PRINT 0
56static const uint8_t gMCU_mW = 25 * 5;
58static uint8_t gMaxPowerIndicatorLEDPinNumber = 0;
63 uint32_t red32 = 0, green32 = 0, blue32 = 0;
64 const CRGB* firstled = &(ledbuffer[0]);
65 uint8_t* p = (uint8_t*)(firstled);
67 uint16_t count = numLeds;
85 uint32_t total = red32 + green32 + blue32 + (gDark_mW * numLeds);
98 uint32_t requested_power_mW = ((uint32_t)total_mW * target_brightness) / 256;
100 uint8_t recommended_brightness = target_brightness;
101 if(requested_power_mW > max_power_mW) {
102 recommended_brightness = (uint32_t)((uint8_t)(target_brightness) * (uint32_t)(max_power_mW)) / ((uint32_t)(requested_power_mW));
105 return recommended_brightness;
113 uint32_t total_mW = gMCU_mW;
121#if POWER_DEBUG_PRINT == 1
122 Serial.print(
"power demand at full brightness mW = ");
123 Serial.println( total_mW);
126 uint32_t requested_power_mW = ((uint32_t)total_mW * target_brightness) / 256;
127#if POWER_DEBUG_PRINT == 1
128 if( target_brightness != 255 ) {
129 Serial.print(
"power demand at scaled brightness mW = ");
130 Serial.println( requested_power_mW);
132 Serial.print(
"power limit mW = ");
133 Serial.println( max_power_mW);
136 if( requested_power_mW < max_power_mW) {
138 if( gMaxPowerIndicatorLEDPinNumber ) {
139 Pin(gMaxPowerIndicatorLEDPinNumber).
lo();
142#if POWER_DEBUG_PRINT == 1
143 Serial.print(
"demand is under the limit");
145 return target_brightness;
148 uint8_t recommended_brightness = (uint32_t)((uint8_t)(target_brightness) * (uint32_t)(max_power_mW)) / ((uint32_t)(requested_power_mW));
149#if POWER_DEBUG_PRINT == 1
150 Serial.print(
"recommended brightness # = ");
151 Serial.println( recommended_brightness);
153 uint32_t resultant_power_mW = (total_mW * recommended_brightness) / 256;
154 Serial.print(
"resultant power demand mW = ");
155 Serial.println( resultant_power_mW);
161 if( gMaxPowerIndicatorLEDPinNumber ) {
162 Pin(gMaxPowerIndicatorLEDPinNumber).
hi();
166 return recommended_brightness;
172 gMaxPowerIndicatorLEDPinNumber = pinNumber;
CFastLED FastLED
Global LED strip management instance.
central include file for FastLED, defines the CFastLED class/object
void delay(unsigned long ms)
Delay for the given number of milliseconds.
void show(uint8_t scale)
Update all our controllers with the current led colors, using the passed in brightness.
void setMaxPowerInVoltsAndMilliamps(uint8_t volts, uint32_t milliamps)
Set the maximum power to be used, given in volts and milliamps.
void setMaxPowerInMilliWatts(uint32_t milliwatts)
Set the maximum power to be used, given in milliwatts.
Base definition for an LED controller.
CLEDController * next()
Get the next controller in the linked list after this one.
virtual int size()
How many LEDs does this controller manage?
static CLEDController * head()
Get the first LED controller in the linked list of controllers.
CRGB * leds()
Pointer to the CRGB array for this controller.
Naive fallback solution for low level pin access.
void hi()
Set the pin state to HIGH
void lo()
Set the pin state to LOW
void set_max_power_in_milliwatts(uint32_t powerInmW)
Set the maximum power used in watts.
void show_at_max_brightness_for_power()
Similar to CFastLED::show(), but pre-adjusts brightness to keep below the power threshold.
void delay_at_max_brightness_for_power(uint16_t ms)
Similar to CFastLED::delay(), but pre-adjusts brightness to keep below the power threshold.
uint32_t calculate_unscaled_power_mW(const CRGB *ledbuffer, uint16_t numLeds)
Determines how many milliwatts the current LED data would draw at max brightness (255)
void set_max_power_in_volts_and_milliamps(uint8_t volts, uint32_t milliamps)
Set the maximum power used in milliamps for a given voltage.
void set_max_power_indicator_LED(uint8_t pinNumber)
Select a pin with an LED that will be flashed to indicate that power management is pulling down the b...
uint8_t calculate_max_brightness_for_power_vmA(const CRGB *ledbuffer, uint16_t numLeds, uint8_t target_brightness, uint32_t max_power_V, uint32_t max_power_mA)
Determines the highest brightness level you can use and still stay under the specified power budget f...
uint8_t calculate_max_brightness_for_power_mW(const CRGB *ledbuffer, uint16_t numLeds, uint8_t target_brightness, uint32_t max_power_mW)
Determines the highest brightness level you can use and still stay under the specified power budget f...
Implements the FastLED namespace macros.
#define FASTLED_NAMESPACE_END
End of the FastLED namespace.
#define FASTLED_NAMESPACE_BEGIN
Start of the FastLED namespace.
Functions to limit the power used by FastLED.
Representation of an RGB pixel (Red, Green, Blue)