Closed RossAWaddell closed 2 years ago
Did you try your code? I think
#include <jled.h>
auto ledStrbLts = JLed(9).Breathe(110, 113, 110)
.MaxBrightness(200).DelayAfter(500).Forever();
void setup() {}
void loop() {
ledStrbLts.MaxBrightness(random(20, 255));
ledStrbLts.Update();
}
should work.
Genius! Thanks again!
Is the Breathe method supposed to flicker like this? I wanted to test to see if I could view the brightness level changes with the above code on my Uno so I changed the code to:
#include <jled.h>
auto ledStrbLts = JLed(10).Breathe(500, 1000, 500)
.MaxBrightness(200).DelayAfter(500).Forever();
void setup() {}
void loop() {
ledStrbLts.MaxBrightness(random(7, 255));
ledStrbLts.Update();
}
With this, there is a definite flicker.
EDIT: this only happens with this line in the loop:
ledStrbLts.MaxBrightness(random(7, 255));
The effect I'm after is for each 'blink' the brightness it fades up to is different, not to change the brightness during the on phase.
The loop()
function is executed over and over again with a very high frequency. There we call the JLed::Update
method, which iteratively updates the LED's output according to the chosen effect. Because you are changing the MaxBrightness
also over and over again, not synchronized with the JLed
effect running, it is flickering.
You need something like this (Serial
stuff just added for debugging):
auto ledStrbLts = JLed(10).Breathe(500, 1000, 500)
.MaxBrightness(200).DelayAfter(500); // note: .Forever() removed
void setup() {
Serial.begin(9600);
}
void loop() {
// Update() returns false when the effect is done 'playing'
if (!ledStrbLts.Update()) {
const auto brightness= random(20,255);
Serial.print("New brightness: ");
Serial.println(brightness);
ledStrbLts.MaxBrightness(brightness);
// start over
ledStrbLts.Reset();
}
}
That did it - thanks heaps!
Apart from the incremental functions, is there a way to update the MaxBrightness value dynamically?