jled
jled copied to clipboard
Question/Feature: Get current brightness
Currently building a cabinet light using this library. Absolutely fantastic. But I have one question. Is it possible to get the current brightness level.
It's not a first world problem, but whenever the doors of the cabinet opens/closes too fast it start at the max or min brightness level while its for example only half way. I'm using only FadeOn and FadeOff functions btw. When I could get the current brightness this can be fixed using the Fade function.
It is basically a follow up question on #66
The "current" brightness level is a function of time, and calculated on-demand. JLed does not store the lastly written level, since this would require an additional byte in the internal state, which I want to keep as small as possible. I'll check if it's possible to return the current level with the Update
method, then the client can decide to use/store the value.
@arnolddej, On the return_current_level_from_update
branch I added experimental support for the Update()
method returning also the brightness level written, while keeping compatibility with old code. Have a look at the new UpdateResult
class. Use it as follows:
auto result = led.Update(); // returns now an `UpdateResult` object that can be cast to a `bool`
// signals that a new value was written out to the LED
if (result.WasChanged()) {
auto level = result.Value();
// do something with the level ....
}
Thanks! I will try it asap.
@jandelgado I've tested it.
It seems like the value not always correspond to the actual brightness whenever you interrupt the running Fade() command with another Fade() command. Also whenever you interrupt the running cmd it sometimes will start at the minimum/maximum brightness level while its current value is only half for example.
Is it even possible to call Fade() with another Fade() on the same object while the first cmd isn't finished yet.
My current turn on/off code:
void turn_on() {
if (ledstrip1.IsRunning()) {
ledstrip1.Stop();
}
ledstrip1.Fade(current_value_ledstrip1, 255, DURATION);
}
void turn_off() {
if (ledstrip1.IsRunning()) {
ledstrip1.Stop();
}
ledstrip1.Fade(current_value_ledstrip1, 0, DURATION);
}
Hello. I have the same problem. I follow your correspondence silently. :)
@arnolddej Could you please post a complete sketch. Especially the part where current_value_ledstrip1 is obtained is of interest here
@aGGreSSiv please open another issue with your question and don't post code with secrets!
@arnolddej Could you please post a complete sketch. Especially the part where current_value_ledstrip1 is obtained is of interest here
I am currently on holiday for a week. Will share the code when I'm back. Basically, I assign a global uint8_t
variable like your example. I then use this variable in the Fade()
function.
No problem - me too :-) Anyway, I think i found the problem in the meantime ...
@arnolddej I did a few changes, please test again.
@jandelgado Unfortunately I already had to build in the lighting. Will test the circuit on a breadboard soon.