Go Down

Topic: [GELÖST] Wie FastLED Animation bzw. Effekt überlagern? (Read 5151 times) previous topic - next topic

Lagom

#45
Oct 17, 2018, 09:22 pm Last Edit: Oct 18, 2018, 08:02 am by Lagom
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.

Quote
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:

Code: [Select]
#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.

Lagom

#46
Oct 22, 2018, 10:38 am Last Edit: Oct 22, 2018, 10:40 am by Lagom
@Verzweifler Ich verstehe zwar leider immer noch nicht, wie Ihre shimmer() Funktion die gradient palette transition zum Blinken bringt, obwohl die letztere jeden Zyklus den leds array komplett neu beschreibt, aber ich habe eine akzeptable Alternative gefunden, der nur das dimmen des shimmer() abgeht (es gibt zwei Animationen in je einem leds array, die dann in einem dritten leds array zusammengemischt werden, daher hat das dimmen in shimmer() keine Auswirkung).

Der "Animation mixer" code ist vielleicht auch für andere Anfänger interessant, die zwei unabhängige FastLED Effekte mischen wollen.

Go Up