Hej,
auf dem englischen Forum ging's nicht weiter, vielleicht gibt es deutschsprachige FastLED Anwender, die mir weiterhelfen können.
Ich habe eine Animation sky(), die alle 144 LEDs eines APA102C Streifens im Verlauf einer Stunde sukzessive mit Farben aus einer Palette füllt.
DEFINE_GRADIENT_PALETTE(skyPalette) {
Position, R, G, B ,
Position, ...
...
};
...
CRGBPalette16 activePalette = skyPalette;
...
CRGB colour = ColorFromPalette(activePalette, paletteIndex);
fill_solid(leds, ledCount, colour);
...
EVERY_N_SECONDS(interval) {
if (paletteIndex < 240) {
paletteIndex++;
}
}
Alle N Sekunden wird also der gesamte leds array mit einem neuen CRGB colour bzw. weichem Übergang zwischen den extrapolierten Palettenfarben gefüllt. Das funktioniert, wie in der FastLED Anleitung beschrieben, gut.
Eine zweite Animation shimmer() soll nun einige wenige immer wieder neu zufällig ausgewählte LEDs if ( random8() < 7) des durch die Palette "befüllten" leds array um z.B. 30% aufhellen/abdunkeln, so daß ein "Schimmer-Effekt" entsteht. Das zufällige Auswählen und bestimmen, wann aufgehellt oder abgedunkelt werden soll, funktioniert mit status flags enum {ledConstant, ledBrightens, ledDarkens}; ebenfalls, wie beschrieben.
Aber, wie lassen sich die ständig durch die Palette gefüllten LEDs des leds arrays in ihrer Helligkeit modifizieren? Mit
leds[number].addToRGB(value);
leds[number].subtractFromRGB(value);
geht es nicht gut, da Farben wie z.B. {241, 17, 238} auf/über 255 gehen können, und so Farbinformation verlieren oder Farben verfälschen.
Gibt es eine Möglichkeit, LEDs via HSV zu beeinflussen, und zwar nur den Wert von V?
Danke für hilfreiche Hinweise!