HSV to RGB mit WS2812 LEDs
Für die Umwandlung von HSV (englisch: hue, value, saturation) zu RGB (red, green, blue) findet man im Internet eine Berechnungsmatrix. Die Funktion der Berechnungsmatrix erschließt sich dem Anwender meistens nicht auf den ersten Blick. In meinem Beispiel errechne ich alle Werte einzeln. Dabei steht die Variable h für hue (Farbe), s für saturation (Sättigung) und v für value (Dunkelstufe). RGB steht für die drei Farbkanäle Rot, Grün und Blau. Die drei Kanäle steuern mit einer 8 Bit PWM (Pulsweitenmodulation) eine RGB LED an. Bei 8 Bit entspricht das den Wertebereich von 0 bis 255.
h: kann einen Wert von 0 - 359 annehmen (Farbwinkel 0° für Rot, 120° für Grün sowie 240° für Blau)
s: in Prozent, 0% entspricht Neutralgrau und 100% entspricht gesättigt (also die reine Farbe)
v: in Prozent, 0% keine Helligkeit und 100% volle Helligkeit
Den Source Code gibt es wie immer am Ende des Artikels, als Download sowie den WS2812 RGB LED Ring als Layout. Die Software läuft auf einen ATmega 328. Der Datenausgang ist PIN D.6 für den WS2812 Ring.
Berechnung des Farbwertes (englisch hue):
Berechnung des Farbwertes | |
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
//Winkel im Farbkeis 0 - 360 in 1 Grad Schritten //h = (englisch hue) Farbwert //1 Grad Schrittweite, 4.25 Steigung pro Schritt bei 60 Grad if(h<61){ *r = 255; *b = 0; *g = 4.25 * h; }else if(h < 121){ *g = 255; *b = 0; *r = 255 - (4.25 * (h-60)); }else if(h < 181){ *r = 0; *g = 255; *b = 4.25 * (h-120); }else if(h < 241){ *r = 0; *b = 255; *g = 255 - (4.25 * (h-180)); }else if(h < 301){ *g = 0; *b = 255; *r = 4.25 * (h-240); }else if(h< 360){ *r = 255; *g = 0; *b = 255 - (4.25 * (h-300)); } |
Berechnung der Farbsättigung (englisch saturation):
Berechnung der Farbsättigung | |
78 79 80 81 82 83 84 85 86 |
//Berechnung der Farbsättigung //s = (englisch saturation) Farbsättigung s = 100 - s; //Kehrwert berechnen diff = ((255 - *r) * s)/100; *r = *r + diff; diff = ((255 - *g) * s)/100; *g = *g + diff; diff = ((255 - *b) * s)/100; *b = *b + diff; |
Berechnung der Dunkelstufe (value):
Berechnung der Dunkelstufe | |
88 89 90 91 92 |
//Berechnung der Dunkelstufe //v = (englisch value) Wert Dunkelstufe einfacher Dreisatz 0..100% *r = (*r * v)/100; *g = (*g * v)/100; *b = (*b * v)/100; |
Dateien
Layout, Source Code usw. (04.01.2014)
Vorherige Seite: Der kleine Elektroniker, Projekte für Kinder
Nächste Seite: USB -> RS232_TTL