Hallo!
Ich möchte eine RGB-LED mit einer automatischen Farbverlaufssteuerung
ansteuern und bin auf der Suche nach einer optimalen Routine in C.
Ich verwende hier die PWM-Kanäle des AT90PWM316.
Derzeit vermische ich die Farben mit if-else-Abfragen.
Die RGB-Werte habe ich in einem Array (valuetable) gespeichert.
Heimo G. schrieb:> Frager schrieb:>> Optimal bezüglich was?>>>> Rechenzeit, Codelänge, Farbverlauf, Helligkeitsverlauf ...>>> Farbverlauf!
Und das muss man sich jetzt wie vorstellen?
Ich hab jetzt dein Verfahren nicht analysiert. Was ist falsch daran?
HSV-RGB Umwandlung ist natürlich eine Möglichkeit. Eine andere ist
folgende:
Du beginnst im Grundzustand Rot. Also RGB = (1,0,0)
Danach beginnt ein Sweep, indem Grün dazu kommt. Von 0 auf 1 in
Schritten hochfahren. Damit ist man im Zustand RGB = (1,1,0)
Danach wird Rot weggenommen und man landet bei RGB = (0,1,0)
Jetzt kommt Blau dazu um bei RGB= (0,1,1) zu landen.
Grün weg, führt zu RGB = (0,0,1)
Rot dazu -> RGB = (1,0,1)
Und Blau wegnehmen RGB = (1,0,0)
Damit ist man wieder im Grundzustand und das Spielchen beginnt wieder
von vorne.
Karl Heinz Buchegger schrieb:> Damit ist man wieder im Grundzustand und das Spielchen beginnt wieder> von vorne.
So wie im Diagramm würden dann die einzelnen Farben anzusteuern sein.
Man sieht:
* Das ganze läuft in 6 Stufen ab
* Im Prinzip durchlaufen alle Kanäle die gleiche Kurve und sind
nur gegeneinander phasenverschoben.
Die Implementierung dazu ist eher simpel und für praktische Zwecke zur
Wohnraumverschönerung mehr als ausreichend.
Da die LEDs im CIE Farbdiagramm allerdings irgendwo mitten drin liegen,
lassen sich viele Bereiche, insbesondere reine Spektralfarben (tiefes
Rot und Blau-Grüntöne) prinzipiell nicht erreichen. Wenn es nur
irgendwie bunt sein soll, geht es natürlich.