RGB zu HSV converter für TFT ?

Hallo in die Runde,

ich möchte Farbewerte in HSV, die ich für meine Lichtsteuerung verwende in RGB- Werte wandeln um diese für die Darstellung der jeweiligen Farbe auf einem TFT zu nutzen.

Hat jemand eine kreative Idee, wie ich das realisiseren könnte?

Hallo Maha, deine Anfrage ist sehr ungenau. Viel zu viel Spielraum für Spekulationen!

HSV in RGB umwandeln ist sehr Rechenintensiv (anders als RGB in HSV). Vorallem spielt es hier eine Rolle, ob Sättigung und Helligkeit mit einfließen. Zeige deinen Sketch. Vorallem mit welcher Lib du arbeitest. Gerade bei der Fastled gibt es allein schon das Problem, dass das Hue-Farbspektrum auf 255 anstatt 360° skaliert wird. Umrechnungen werden ungenau.

Einfachste wäre es, die angesteuerten Pixel bei FastLed auszulesen. Dort müssten auch RGB Werte abgefragt werden können.

Mein Sketch ist inzwischen 2500 Zeilen lang... das kann ich keinem antun :slight_smile:

Die Aufgabenstellung ist wie folgt:

Ich habe eine Zentrale, mit 7" Display. Diese empfängt von diversen PIR Sensoren in meiner Wohnung aktuelle Bewegungen und von einem Außensensor Informationen zum Tageslicht.

Die Zentrale vergleicht die Statusmeldungen der PIRs und die Uhrzeit, Wochentag, Feiertag etc. und gibt dann meinen Lampen Vorgaben welche Farbe, Sättigung und Helligkeit jeweils einzustellen ist.... es gibt noch ein paar zusätzliche Infos für bestimmte Effekte/Programme...

Auf dem 7" Display ist neben einer Uhr mit Datum, Wochentag und Feiertag auch der Grundriss der Wohnung skizziert. Ist in einem Raum Licht ist das "Kästchen" was den Raum darstellt weiß gefüllt....

Nun möchte ich das ganze etwas aufhübschen und gern die Farben die die jeweiligen Lampen haben auf dem Display darstellen- das muss nicht übermäßig genau sein, aber sollte halbwegs passen...

Die Fast-LED- Lib brauche ich sonst für keine Funktion in meinem Sketch.

Der Ausschnitt mit dem ich es versucht habe sieht so aus:

void showRGBTFT4( const CRGB& rgb)
{
  analogWrite(TFT4rot,   rgb.r );
  analogWrite(TFT4gruen, rgb.g );
  analogWrite(TFT4blau,  rgb.b );
}

void display134()
{
  /showRGBTFT1( CHSV( Status4[2], Status4[3], Status4[4]) ); 
  myGLCD.setColor(TFT4rot ,TFT4gruen , TFT4blau);
  myGLCD.fillRect(WoZX1 + 2, WoZY1 + 2, WoZX2 - 2, WoZY2 - 2); 
}

Schau mal in die FastLED Bibliothek. Da sind mehrere Version davon drin:
https://github.com/FastLED/FastLED/blob/master/hsv2rgb.cpp

Die evtl. benötigten scale8() Funktionen gibt es hier:
https://github.com/FastLED/FastLED/blob/master/lib8tion/scale8.h
(sieht komplizierter aus als es ist. Man braucht wohl jeweils nur eine Zeile davon)

OK, da hab ich ja zumindest mal was zum lesen... :slight_smile: danke schon mal... ich meld mich wenn ich nicht weiter komme...

Kannst natürlich auch gleich die Library so nehmen. Da sollte ja nur das eingefügt werden was du wirklich brauchst.

Normal wird glaube ich die rainbow Version verwendet

Hallo,

vielleicht hilft dir auch diese Seite weiter: HSV to RGB conversion | color conversion

Die Formeln sollten sich leicht in C umsetzen und an die eigenen Bedürfnisse anpassen lassen.

Das schau ich mir auch mal an- danke schön :slight_smile: