FastLED 3.9.15
Loading...
Searching...
No Matches
power_mgt.h
Go to the documentation of this file.
1#pragma once
2
3#include "fl/system/fastled.h"
4
5#include "pixeltypes.h"
6
9
10
11
15
16
20
32 float exponent;
33
35 constexpr PowerModelRGB()
36 : red_mW(5 * 16), green_mW(5 * 11), blue_mW(5 * 15), dark_mW(5 * 1),
37 exponent(1.0f) {}
38
49 constexpr PowerModelRGB(fl::u8 r, fl::u8 g, fl::u8 b, fl::u8 d, float e = 1.0f)
50 : red_mW(r), green_mW(g), blue_mW(b), dark_mW(d), exponent(e) {}
51};
52
62 float exponent;
63
65 constexpr PowerModelRGBW()
66 : red_mW(90), green_mW(70), blue_mW(90), white_mW(100), dark_mW(5),
67 exponent(1.0f) {}
68
77 float e = 1.0f)
78 : red_mW(r), green_mW(g), blue_mW(b), white_mW(w), dark_mW(d),
79 exponent(e) {}
80
83 constexpr PowerModelRGB toRGB() const {
85 }
86};
87
98 float exponent;
99
101 constexpr PowerModelRGBWW()
102 : red_mW(85), green_mW(65), blue_mW(85),
103 white_mW(95), warm_white_mW(95), dark_mW(5),
104 exponent(1.0f) {}
105
115 fl::u8 w, fl::u8 ww, fl::u8 d,
116 float e = 1.0f)
117 : red_mW(r), green_mW(g), blue_mW(b),
118 white_mW(w), warm_white_mW(ww), dark_mW(d),
119 exponent(e) {}
120
134 constexpr PowerModelRGB toRGB() const {
135 // Distribute white-channel mW evenly across R/G/B. Clamp to 255 (u8
136 // max) on overflow — a wrapping static_cast<u8> here would make the
137 // brightness limiter *less* conservative on the highest-draw configs
138 // (where it most needs to be conservative). The worst-case
139 // under-budget per channel from the floor division is 2 mW.
140 return PowerModelRGB(
141 static_cast<fl::u8>(
142 (red_mW + (white_mW + warm_white_mW) / 3) > 255
143 ? 255 : (red_mW + (white_mW + warm_white_mW) / 3)),
144 static_cast<fl::u8>(
145 (green_mW + (white_mW + warm_white_mW) / 3) > 255
146 ? 255 : (green_mW + (white_mW + warm_white_mW) / 3)),
147 static_cast<fl::u8>(
148 (blue_mW + (white_mW + warm_white_mW) / 3) > 255
149 ? 255 : (blue_mW + (white_mW + warm_white_mW) / 3)),
150 dark_mW,
151 exponent);
152 }
153};
154
162void set_power_model(const PowerModelRGB& model);
163
175void set_power_scaling_exponent(float exponent);
176
181
186inline void set_power_model(const PowerModelRGBW& model) {
187 set_power_model(model.toRGB()); // TODO: Implement RGBW power model.
188}
189
194inline void set_power_model(const PowerModelRGBWW& model) {
195 set_power_model(model.toRGB()); // TODO: Implement RGBWW power model.
196}
197
201
203
204
208
211void set_max_power_in_volts_and_milliamps( fl::u8 volts, fl::u32 milliamps);
212
215void set_max_power_in_milliwatts( fl::u32 powerInmW);
216
220void set_max_power_indicator_LED( fl::u8 pinNumber); // zero = no indicator LED
221
223
224
234
242void delay_at_max_brightness_for_power( fl::u16 ms);
243
245
246
250
256fl::u32 calculate_unscaled_power_mW( const CRGB* ledbuffer, fl::u16 numLeds);
257
261
266fl::u32 scale_power_for_brightness(fl::u32 total_mW, fl::u8 brightness);
267
276fl::u8 calculate_max_brightness_for_power_mW(const CRGB* ledbuffer, fl::u16 numLeds, fl::u8 target_brightness, fl::u32 max_power_mW);
277
286fl::u8 calculate_max_brightness_for_power_vmA(const CRGB* ledbuffer, fl::u16 numLeds, fl::u8 target_brightness, fl::u32 max_power_V, fl::u32 max_power_mA);
287
297fl::u8 calculate_max_brightness_for_power_mW( fl::u8 target_brightness, fl::u32 max_power_mW);
298
300
301
fl::CRGB leds[NUM_LEDS]
fl::UISlider brightness("Brightness", BRIGHTNESS, 0, 255)
Internal FastLED header for implementation files.
fl::CRGB CRGB
Definition crgb.h:25
fl::u32 calculate_unscaled_power_mW(const CRGB *ledbuffer, fl::u16 numLeds)
Determines how many milliwatts the current LED data would draw at max brightness (255)
void show_at_max_brightness_for_power()
Similar to CFastLED::show(), but pre-adjusts brightness to keep below the power threshold.
fl::u32 scale_power_for_brightness(fl::u32 total_mW, fl::u8 brightness)
Applies the configured power-scaling response to a total power value.
void set_max_power_indicator_LED(fl::u8 pinNumber)
Select a pin with an LED that will be flashed to indicate that power management is pulling down the b...
fl::u8 calculate_max_brightness_for_power_mW(const CRGB *ledbuffer, fl::u16 numLeds, fl::u8 target_brightness, fl::u32 max_power_mW)
Determines the highest brightness level you can use and still stay under the specified power budget f...
void delay_at_max_brightness_for_power(fl::u16 ms)
Similar to CFastLED::delay(), but pre-adjusts brightness to keep below the power threshold.
void set_max_power_in_volts_and_milliamps(fl::u8 volts, fl::u32 milliamps)
Set the maximum power used in milliamps for a given voltage.
void set_max_power_in_milliwatts(fl::u32 powerInmW)
Set the maximum power used in watts.
fl::u8 calculate_max_brightness_for_power_vmA(const CRGB *ledbuffer, fl::u16 numLeds, fl::u8 target_brightness, fl::u32 max_power_V, fl::u32 max_power_mA)
Determines the highest brightness level you can use and still stay under the specified power budget f...
void set_power_model(const PowerModelRGB &model)
Set custom RGB LED power consumption model.
float get_power_scaling_exponent()
Get the current brightness-to-power response exponent.
void set_power_scaling_exponent(float exponent)
Set a non-linear brightness-to-power response exponent.
PowerModelRGB get_power_model()
Get current RGB power model.
unsigned char u8
Definition stdint.h:131
Includes defintions for RGB and HSV pixels.
fl::u8 blue_mW
Blue channel power at full brightness (255), in milliwatts.
Definition power_mgt.h:30
fl::u8 dark_mW
Dark LED baseline power consumption, in milliwatts.
Definition power_mgt.h:31
fl::u8 red_mW
Red channel power at full brightness (255), in milliwatts.
Definition power_mgt.h:28
float exponent
Brightness-to-power response exponent (1.0 = linear)
Definition power_mgt.h:32
fl::u8 green_mW
Green channel power at full brightness (255), in milliwatts.
Definition power_mgt.h:29
constexpr PowerModelRGB(fl::u8 r, fl::u8 g, fl::u8 b, fl::u8 d, float e=1.0f)
Custom RGB power model.
Definition power_mgt.h:49
constexpr PowerModelRGB()
Default constructor - WS2812 @ 5V (16mA/11mA/15mA @ 5V), linear response.
Definition power_mgt.h:35
RGB LED power consumption model Used for standard 3-channel LEDs (WS2812, WS2812B,...
Definition power_mgt.h:27
constexpr PowerModelRGBW()
Default constructor - SK6812 RGBW @ 5V estimate, linear response.
Definition power_mgt.h:65
float exponent
Brightness-to-power response exponent (1.0 = linear)
Definition power_mgt.h:62
fl::u8 green_mW
Green channel power at full brightness (255), in milliwatts.
Definition power_mgt.h:58
fl::u8 dark_mW
Dark LED baseline power consumption, in milliwatts.
Definition power_mgt.h:61
fl::u8 blue_mW
Blue channel power at full brightness (255), in milliwatts.
Definition power_mgt.h:59
constexpr PowerModelRGB toRGB() const
Convert to RGB model (extracts RGB components, preserves exponent)
Definition power_mgt.h:83
constexpr PowerModelRGBW(fl::u8 r, fl::u8 g, fl::u8 b, fl::u8 w, fl::u8 d, float e=1.0f)
Custom RGBW power model.
Definition power_mgt.h:76
fl::u8 white_mW
White channel power at full brightness (255), in milliwatts.
Definition power_mgt.h:60
fl::u8 red_mW
Red channel power at full brightness (255), in milliwatts.
Definition power_mgt.h:57
RGBW LED power consumption model.
Definition power_mgt.h:56
fl::u8 white_mW
Cool white channel power at full brightness (255), in milliwatts.
Definition power_mgt.h:95
float exponent
Brightness-to-power response exponent (1.0 = linear)
Definition power_mgt.h:98
fl::u8 green_mW
Green channel power at full brightness (255), in milliwatts.
Definition power_mgt.h:93
fl::u8 warm_white_mW
Warm white channel power at full brightness (255), in milliwatts.
Definition power_mgt.h:96
fl::u8 red_mW
Red channel power at full brightness (255), in milliwatts.
Definition power_mgt.h:92
constexpr PowerModelRGBWW()
Default constructor - Hypothetical RGBWW @ 5V estimate, linear response.
Definition power_mgt.h:101
fl::u8 blue_mW
Blue channel power at full brightness (255), in milliwatts.
Definition power_mgt.h:94
fl::u8 dark_mW
Dark LED baseline power consumption, in milliwatts.
Definition power_mgt.h:97
constexpr PowerModelRGB toRGB() const
Convert to RGB model (folds W/WW power back into RGB so the brightness limiter doesn't under-budget).
Definition power_mgt.h:134
constexpr PowerModelRGBWW(fl::u8 r, fl::u8 g, fl::u8 b, fl::u8 w, fl::u8 ww, fl::u8 d, float e=1.0f)
Custom RGBWW power model.
Definition power_mgt.h:114
RGBWW LED power consumption model (RGB + Cool White + Warm White)
Definition power_mgt.h:91