Habe ein kleines Problem mit dem Fading 3er LEDs auf einem WS2812 Strip.
Die 3 Leds sollen einen Sekundenzeiger anzeigen. Jedoch hackeln die LEDs
noch ein bisschen.
Grund ist die lineare Berechnung der Helligkeit (-> Berechnung Fading).
Wie sieht die logarithmische Berechung genau aus? Mit einem Array möchte
ich ungern arbeiten, da die Zeit vom loop abhängig ist. Soll heißen, der
loop braucht z.B. einmal 20ms und das nächste mal 30ms. Das würde
bedeuten das innerhalb einer Sekunde mir die letzen Werte eines Arrays
nicht zur Verfügung stehen.
Zum Einsatz kommt ein Arduino Pro Mini 328P. Der Arduino ist nur für die
Anzeige einer Uhr zuständig. (Stunden, Minuten und Sekundenzeiger).
1
staticbytesAlt;
2
unsignedlongaZeit=millis();
3
staticunsignedlongvZeit;
4
staticunsignedlongdZeit;
5
6
if(s!=sAlt){
7
vZeit=aZeit;
8
sAlt=s;
9
}
10
11
// Vergangene Zeit seit der letzen Sekundenänderung
Neben dem bereits genannten Artikel hab ich es folgendermaßen berechnet
und war recht zufrieden:
k = n^(1/m), wobei n die maximale (PWM-)Stufe ist und m die Anzahl der
Schritte. k ergibt einen Faktor, mit dem multipliziert wird.
Beispiel mit n = 255 und m = 10:
Schritt 0: 0
Schritt 1: k -> 1,7404198105
Schritt 2: (Schritt 1) * k -> 3,0290611167
...
Schritt 10: (Schritt 9) * k -> 255
Ob das nun der Formel aus dem Artikel entspricht bezweifle ich, mir hat
es jedenfalls für meine Anwendung gereicht...
Ralf
Den Artikel hatte ich schon gesehen(wird man ja tausendfach von Google
drauf weitergeleitet ;)). Hab davon heute mittag mit der Tabelle
gearbeitet. Da trat aber dann das Problem auf, das wenn die loopTime mal
um ein paar ms verspringt, nicht mehr alle Werte des daraus erzeugten
Wertes angesprochen wurden.
@Ralf, ich werde mal schaun ob ich das entsprechend anpassen kann für
meine Aufgabe. Danke schon mal.
>Hab davon heute mittag mit der Tabelle>gearbeitet. Da trat aber dann das Problem auf, das wenn die loopTime mal>um ein paar ms verspringt, nicht mehr alle Werte des daraus erzeugten>Wertes angesprochen wurden.
Dann zeig mal deinen Code dazu.
Mit deinem float Geraffel gewinnst du jedenfalls keinen
Blumentopf oder einen Zeitvorteil gegenüber einer Tabelle;)
Das hier ist vorerst mein derzeitiger Sketch. Im Endeffekt soll hier ein
sauberer Überlauf der Sekunden geschehen. Das heißt, man soll den
"Ausschlag" des Sekundenzeigers nicht sehen.
leds[s] fadet runter
leds[s+1] fadet hoch und wieder runter // oder aber konstant 255 wenn es
flüssig aussieht mit s und s+2
leds[s+2] fadet hoch
Habe derzeit nur einen WS2812 Strip mit insgesamt 15 RGB Leds im
Einsatz. Der Fade sieht für mich noch nicht so prickelnd aus. Derzeit
handelt es sich um die RGB Stips mit 60Leds/m. Im richtigen Prototypen
kommen 60 zum ein Einsatz mit 144Leds/m. Somit werden vermutlich die
Übergänge automatisch weicher. Ich lasse mich aber eines besseren
belehren.