Forum: Mikrocontroller und Digitale Elektronik eigene Farbskala erstellen


von Farb_Rolf (Gast)


Lesenswert?

Hy zusammen,

entschuldige für die schlechten Betreff mir ist kein kurzer eingefallen.

Ich programmiere gerade an einer Temperatureinheit (MCP9700) für meinen 
Balkon die Daten werden per RFM12B gesendet und auf einem Display 1,8" 
angezeigt. Alles klappt auch soweit.

Nur dann kamm mir die Idee die Hintergrundfrabe entsprechend der 
Temperatur zuzeigen, ähnlich wie bei einer Wärmebildkamera.
Das Display hat 65K Farben.

#define ST7735_BLACK   0x0000
#define ST7735_RED     0x001F
#define ST7735_BLUE    0xF800
#define ST7735_GREEN   0x07E0
#define ST7735_CYAN    0x07FF
#define ST7735_MAGENTA 0xF81F
#define ST7735_YELLOW  0xFFE0
#define ST7735_WHITE   0xFFFF

Nur ich stehe voll auf dem Schlauch wie ich die Temperatur in eine 
passende Farbe "umrechnen" soll.
Hoffe jemand kann mir ein tip geben, wo ich anfangen soll.

MFG
Rolf

von rava (Gast)


Lesenswert?

hsv-transformation und am hue-wert drehen ist ein erster schritt.
Damit wanderst du aber nur durch den Regenbogen.

Auch andere Transformationen sind denkbar. Da kann man sich auch selbst 
was bastlen.


Im anschluss musst du von RGB auf diesen 16Bit-Wert umrechnen. Dazu kann 
ich nicht viel sagen.

von Karl H. (kbuchegg)


Lesenswert?

Erst mal damit, dass du entschlüsselst, wie sich die Zahlen in den 
#define zusammensetzen.
Da stecken garantiert R(ot), G(rün), B(lau) Werte dahinter.

Dann denkst du dir zb eine Fomel aus, wie du aus der Temperatur auf 
einen Wert am Farbkreis kommst, und dann eine Umrechnung vom Farbkreis 
auf die RGB Werte. Die beiden Umrechnungen kann man auch zusammenfassen 
und vereinfachen. Aber solange du nicht weißt, wie sich die Zahlen da 
oben zusammensetzen, WARUM also Gelb den Wert 0xFFE0 hat, solange ist 
das sinnlos.

Hinweis: Gelb ist eine Mischfarbe, die entsteht, wenn Rot 'voll 
aufgedreht' ist, Grün 'voll aufgedreht' und Blau keinen Anteil hat.

Würden die Farben Rot, Grün und Blau jeweils Werte von 0 bis 255 
annehmen könnnen, dann wäre Gelb: Rot 255, Grün 255, Blau 0

: Bearbeitet durch User
von Marc P. (marcvonwindscooting)


Lesenswert?

Mir sind deine Farben wurscht, wirst schon wissen, warum du die gew"ahlt 
hast. Nennen wir sie einfach mal F[0]..F[7], nachdem Du sie in ein Array 
gesteckt hast ;-)
F[0] = Farbe der Minimaltemperatur T0
F[7] = Farbe der Maximaltemperatur T7

F[i] ab Temperatur T[i] := T0 + i*(T7-T0)/7

Nun sei eine Temperator T gemessen.
=> Schauen in welchem Intervall i die Temperator liegt, d.h. T[i]<=T, i 
maximal. Und dann lineare Interpolation zwischen T[i] und T[i+1]:

F = ( (T-T[i])*F[i+1] + (T[i+1]-T)*F[i] ) / (T[i+1]-T[i])

Und halt eventuelle Grenzen der Arrays beachten.

EDIT: Ups, da war ein Fehlerteufelchen im Nenner.

: Bearbeitet durch User
von asd (Gast)


Lesenswert?

Die Interpolation muss aber für jede Komponente (R, G, B) getrennt 
gemacht werden.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Du musst bei den Interpolationen auch die Wertebereiche für die drei
Grundfarben berücksichtigen. Da die 16 Bit nicht in drei gleichgroße
Gruppen aufgetailt werden können, sind die Wertebereiche
unterschiedlich:

Rot   0..31  -> 5 Bit
Grün  0..63  -> 6 Bit
Blau  0..31  -> 5 Bit
               ——————
               16 Bit

Bei deinen Defines sind übrigens die Farbwerte für rot und blau
vertauscht.

von Farb_Rolf (Gast)


Lesenswert?

Danke für die antworten,

Wie sich die Farben mischen weiss ich (Schulwissen :D), aber wie die 
sich in form von Zahlen zusammen setzten ist etwas unklar (bei RGB mit 
je 8 Bit zb).
Zudem kommt ja noch, das Frabe kein zusammenhang zur Temperatur hat.

von Farb_Rolf (Gast)


Lesenswert?

Farb_Rolf schrieb:
> Zudem kommt ja noch, das Frabe kein zusammenhang zur Temperatur hat.

Ich meine das für mich kein zusammenhang besteht.

von Reinhard Kern (Gast)


Lesenswert?

Farb_Rolf schrieb:
> Zudem kommt ja noch, das Frabe kein zusammenhang zur Temperatur hat.

Zumindest keinen einheitlichen - geht man nach glühendem Metall, so gibt 
es da die Farbfolge Schwarz - Dunkelrot - Hellrot - Gelb - Weiss. Das 
wird oft verwendet weil eingängig.

Ein Astronom sieht das möglicherweise etwas anders: da gilt auch rot - 
gelb - weiss, aber blaue Sterne sind noch heisser.

Was du erstellen willst, heisst aber nicht umsonst "Falschfarbenbild".

Gruss Reinhard

von pko p. (pkopprasch)


Angehängte Dateien:

Lesenswert?

ist zwar java, aber lässt sich ja adaptieren

farbwerte werden über einen Bereich verteilt und die zwischenwerte 
interpoliert

beispiel für eine Farbskala steht in der txt, das format ist 
Index(0-255), R, G, B

grüße Phillip

von c-hater (Gast)


Lesenswert?

Farb_Rolf schrieb:
> Farb_Rolf schrieb:
>> Zudem kommt ja noch, das Frabe kein zusammenhang zur Temperatur hat.
>
> Ich meine das für mich kein zusammenhang besteht.

Nach Beobachtungen von Wahrnehmungspsychologen (und ihren Vorgängern in 
den letzten ca. 3000 Jahren Menschheitsgeschichte) gibt es einen. Die 
Begrifflichkeiten um "warme" und "kalte" Farben sind ein Hinweis dafür.

Sehr weit verbreitet ist, die Sachen mit Blau und Rot darzustellen. Das 
findet man an Heizungsthermostaten, Wasserhähnen usw.
Und jeder Mensch weltweit versteht das ziemlich unmittelbar (was es den 
Herstellern dieser Gerätschaften erspart, dutzende oder gar hunderte von 
lokalisierten Varianten herstellen zu müssen).

Also nimmst du für die Extrempunkte ein reines Rot oder Blau.

Für jeden konkreten Wert interpolierst du dann einmal linear für eine 
der beiden Farbkomponenten und füllst die andere Farbkompenente mit dem 
auf, was zu 100% des Maximums fehlt. Fertich.

Damit's nicht gar so grell wirkt (insbesondere die ultrahäßlichen lila 
Zwischentöne) kann man die Farbsättigung zurücknehmen. Das funktioniert 
im Prinzip genauso wie oben beschrieben, bloß daß man die Interpolation 
nicht von 0..100% macht, sondern von z.B. 0..20%. Auch das Auffüllen der 
anderen Farbe passiert dann nur bis 20%. Die (konstant) fehlenden 80% 
verteilt man zu je einem Drittel über alle drei Farbkanäle durch simple 
Addition zur Entwurfszeit berechenbarer Konstanten. Das geht mit einer 
einzigen Addition!

Schon hat man dasselbe Farbspiel, bloß in deutlich erträglicheren 
Pastellfarben mit einer einzigen Addition als Mehraufwand.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.