Codieren der Farbe der RGB-LED
Wie dir vielleicht aufgefallen ist, haben wir die Pulsweitenmodulation immer an einem Beispiel erklärt, in welchem der größte Zahlenwert bei 255 lag. Grund dafür ist, dass dies die Grundlage einer der vielen Definitionsweisen einer Farbe ist, welche wir in diesem Kurs benutzen, um die RGB-LED anzusteuern.
Eine Farbe setzt sich immer aus drei Komponenten zusammen, dem roten, dem grünen und dem blauen Farbanteil. Durch die Kombination dieser drei Farbteile in verschiedenster Intensität ergeben sich dementsprechend auch verschiedenste Farben. Das folgende Bild der CIE-Normfarbtafel (Commission internationale de l'éclairage) eines beispielhaften RGB-Farbraums beschreibt den Sachverhalt ganz gut.
Abbildung: CIE-Normfarbtafel
Quelle: Wikipedia
Abgebildet wird der Adobe-RGB-Farbraum als schwarzes Dreieck. Umhüllt von der roten Spektralfarblinie sind alle für den Menschen sichtbare Farben, was bedeutet, dass es selbst mit modernster Technik noch Farben gibt, die vom Menschen nicht dargestellt werden können und nur in der Natur vorkommen. Allerdings ist die Abstufung zwischen jenen Farben die wir darstellen können und jenen die wir nicht darstellen können meist so fein, dass dieser Unterschied nicht wirklich von Relevanz ist. Die Farben außerhalb der Spektralfarblinie existieren nur in der Theorie.
Mit verschiedensten Mischverhältnissen der Farben Rot, Grün und Blau sind theoretisch also alle der oben abgebildeten Farben darstellbar und genau davon machen wir in diesem Projekt Gebrauch. Es gibt zwei relativ bekannte Farbcodes, den RGB-Farbcode und den hexadezimalen Farbcode. Beide beschreiben dasselbe, nämlich die Intensität der Farben Rot, Grün und Blau (in genau dieser Reihenfolge!) in einem Zahlenbereich von 0 bis 255. Dabei steht 0 für keine Intensität (die jeweilige LED wäre dann ausgeschaltet) und 255 für maximale Intensität. Der unterschied zwischen beiden Farbcodes liegt in der Darstellungsweise der Zahlen-/Intensitätswerte. Während bei dem RGB-Farbcode die Darstellungsweise die Syntax "Rot,Grün,Blau" besitzt, wird im hexadezimalen ohne Kommas gearbeitet. Jede der drei Zahlen wird ins Hexadezimale umgerechnet und hinter die vorherige geschrieben. Voran steht ein "#".
Beispiel:
Im RGB-Farbcode wäre die Farbe Rot logischerweise 255,0,0, da alle Farben bis auf Rot nicht zur Darstellung benötigt werden und daher den Pegel 0 erhalten. Umgerechnet ins Hexadezimale wäre das #FF0000. FF steht dabei für 255 und die beiden 00-Blöcke jeweils für eine der Nullen im RGB-Code. Mehr über die Umrechnung vom Dezimalen ins Hexadezimale und zurück findest du hier.
Da die hexadezimale Codierung, trotz gleichen Inhalts, etwas unübersichtlicher und schwieriger zu verstehen ist als die RGB-Codierung, werden wir im Rahmen dieses Projektes mit dem RGB-Farbcode arbeiten. Ziel ist es die 3,3 V, welche der ESP32 ausgeben kann, mit Hilfe einer Pulsweitenmodulation dynamisch auf den Wertebereich von 0 bis 255 abbilden zu können, um die Farben des RGB-Farbspektrums darzustellen.
Eine Vielzahl an RGB-Farbcodes findest du in sogenannten Farbtabellen im Internet.