Hi,
der Thread über den WS2812 hat mich inspiriert. Es geht darum, von einer Anzeige eines RGB Strips zu einer anderen Anzeige schön weich hinzufaden, also über n Zwischenschritte (Zwischenbilder) weiche Übergänge von einer Anzeige zu einer anderen zu erreichen, um Effekte "weichzuzeichnen". Grundsätzlich würde ich wie folgt vorgehen:
Aktuelle Anzeige in Array1 kopieren
gewünschte neue Anzeige berechnen/aus Speicher holen und in Array2 kopieren
von Array1 (alt) nach Array2 (neu) über n Schritte überblenden:
von 0 bis n folgendes ausführen (einzelnes Zwischenbild berechnen)
für 0 bis Anzahl der LEDs folgendes ausführen (über ganze Striplänge)
für r, g, b folgendes ausführen (jede LED schrittweise zum Sollwert führen)
wenn altes rot < neues rot dann r=r+((neu-alt)/Schritte)*n
wenn altes rot > neues rot dann r=r-((alt-neu)/Schritte)*n
mit grün und blau das gleiche
EDIT: Wie sich im Laufe des Threads herausstellen wird, lautet die korrekte Formel
r = alt + (((alt - neu) * n) / Schritte)
und die Fallunterscheidung enfällt.
ganzes Zwischenbild anzeigen/ausgeben
--> nach n facher Ausführung entspricht die aktuelle Anzeige dem gewünschten Array2 (?)
Funktioniert das auf diese Art?
Wenn ich das so mache, habe ich für einen Fadevorgang verdammt viele IF Abfragen (n BilderLEDs3 Farben*2 Möglichkeiten). Das dauert doch ziemlich lange, oder? Außerdem muss ich den gesamten Strip noch 2 * extra im Speicher vorhalten (aktuelle Anzeige + Array1 + Array2).
Gibt es eine einfachere oder schnellere oder speicherschonendere Möglichkeit? Oder macht man das so?
Beste Grüße, Helmuth