I'm wondering if there is a FastLED function or code to fade the brightness

fastled-support
gplus
(Alex Tatistcheff) #1

I’m wondering if there is a FastLED function or code to fade the brightness in a more human view-able fashion.

To elaborate, I’m working on a project where I want the LEDs to pulsate between 255 and 0. These are slow pulses lasting about 7 seconds. The issue I’m having is that brightness changes above - say 50 are much less noticeable than those below 50. So the pulses get bright very quickly and then stay bright too long.

What I need is some sort of scaling factor so the lower brightness changes occur slower and the brighter ones occur faster. This should result in a more linear looking pulse.

Here’s the code I’m currently using, it just ramps up from 0 to (about) 250 and back down. My gFadeAmount is set to 2.

Inside void loop()

delay(25);
brightness = brightness + gFadeAmount;
if (brightness == 0 || brightness > 250) { gFadeAmount = -gFadeAmount; }
FastLED.setBrightness(brightness);

FastLED.show();

Any thoughts would be appreciaed.
Thanks!

(Mike Katchmar) #2

Some sort of logarithmic function?

(Steve Anken) #3

Lookup table?

(Marc Miller) #4
(Marc Miller) #5

float num = pow((i/255.0), 2.2);
int n = num * 255;

(Alex Tatistcheff) #6

Thanks Marc that did the trick. That Adafruit page has just the lookup table I needed. Glowing is much more user-friendly now!

(Andrew Tuline) #7

Glad I found this post. . .

There’s a (Googleable) routine called fscale() which would probably fill the bill quite nicely here, and is configurable. Of course, the only problem is, that by using the pow function, it’s slow as sin. .

Would love to see an integer version that uses ‘fastmath’. Then again, one could always create a lookup table in startup.

(Alex Tatistcheff) #8

Here’s the code I use to fade with the lookup table.

brightness = brightness + gFadeAmount;
if (brightness == 0 || brightness > 254) { gFadeAmount = -gFadeAmount; }
FastLED.setBrightness(gamma8[brightness]);

And the lookup table:

// This is the gamma lookup for mapping 255 brightness levels
const uint8_t PROGMEM gamma8[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5,
5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10,
10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16,
17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25,
25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36,
37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50,
51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68,
69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89,
90, 92, 93, 95, 96, 98, 99,101,102,104,105,107,109,110,112,114,
115,117,119,120,122,124,126,127,129,131,133,135,137,138,140,142,
144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175,
177,180,182,184,186,189,191,193,196,198,200,203,205,208,210,213,
215,218,220,223,225,228,231,233,236,239,241,244,247,249,252,255 };