Ja, das rhythmische "wellenartige Gewaber" (puh, mit Worten eine LED-Animation beschreiben...) mit der "Perlin Noise" sieht auch recht interessant aus, auch wenn es nicht so "vor sich hin schimmert und perlt" wie
shimmer(), also eine gewisse Art "Granularität" fehlt da und es "flimmert" zu schnell, wenn ich an den NOISESCALE und beatsin8 Werten herumdilettiere.
Deine Sky Animation überschreibt bei jedem Aufruf dein komplettes Leds Array, alle Änderungen bleiben nur bis zum nächsten Aufruf von sky() erhalten.
Deine shimmer() Animation mag zwar alleine laufen, aber der aktuelle Stand der Animation geht bei jedem überschreiben des leds[] array verloren.
Allerdings funktionierte Ihre erste alternative shimmer() Idee als separate Funktion ja auch sehr gut, nur daß diese nicht das langsame und weiche Abdunkeln/Aufhellen per status flag realisierte:
#define NORMAL_BRIGHTNESS 64
#define SHIMMER_AMOUNT 128
#define CHANCE_OF_SHIMMER 8 //Higher => lower chance
void schimmer() {
for (int led = 0; led < ledCount; led++) {
if (random8(CHANCE_OF_SHIMMER) == 0) {
if (random8(2)) { // Returns a random choice of 0 or 1
leds[led].fadeToBlackBy(255 - (NORMAL_BRIGHTNESS - SHIMMER_AMOUNT)); // Brighten
}
else {
leds[led].fadeToBlackBy(255 - (NORMAL_BRIGHTNESS + SHIMMER_AMOUNT)); // Darken
}
}
else { //If no shimmer is applied
leds[led].fadeToBlackBy(255 - NORMAL_BRIGHTNESS);
}
}
} //schimmer()
Ich ging fälschlicherweise davon aus, daß eine zweite Funktion nach jedem Beschreiben des leds array durch die sky() Animation die Helligkeit zufällig ausgewählter leds array Elemente modulieren kann. Im Prinzip tut dies Ihre "Perlin Noise" basierte Animation offensichtlich auch, ohne daß der langsame Himmelsverlauf gestört wird.
Ich konstatiere: eine gradient palette mit einem einfach zu justierenden shimmer zu kombinieren ist offensichtlich einige Nummern zu groß für mich; aber ich danke Ihnen für die Hinweise und Beispiele und ganz besonders Ihre Geduld. Davon können sich, nachdem ich diverse deutsche Arduino threads hier gelesen habe, so einige einige Scheiben abschneiden.