RGB-LEDs sind spezielle LEDs, welche in drei verschiedenen Farben leuchten können, wobei jede Farbe ein separaten PIN besitzt, der unabhängig von den anderen Farben angesteuert werden kann. Der vierte PIN ist dann eine gemeinsame Anode bzw. Kathode (je nach Bauform).
Die Kurzbezeichnung "RGB" steht für die drei Grundfarben rot, grün und blau. Sinngemäß setzt sich das RGB-Licht aus rotem, grünem und blauem Licht zusammen. Mit diesen drei Grundfarben lassen sich alle anderen Lichtfarben mischen, je nachdem mit wieviel Intensität man die einzelnen LED-Farben leuchten lässt.
Im ersten Experiment sind den Farb-Komponenten jeweils ein Taster zugeordnet und beim Drücken leuchtet oder erlischt die entsprechende Farbe. So kann man die Farb-Komponenten und deren direkte Mischfarben ausprobieren:
/**
* © 2018 Christian Grieger
* GNU GENERAL PUBLIC LICENSE
*
* Manual color component switch for single RGB LED (common cathode)
*/
#define PIN_LED_RED 9
#define PIN_LED_GREEN 10
#define PIN_LED_BLUE 11
#define PIN_BUTTON_RED 5
#define PIN_BUTTON_GREEN 6
#define PIN_BUTTON_BLUE 7
#define BUTTON_DEBOUNCE_INTERVAL 250 // in milliseconds
byte ledPins[3] = {PIN_LED_RED, PIN_LED_GREEN, PIN_LED_BLUE};
byte buttonPins[3] = {PIN_BUTTON_RED, PIN_BUTTON_GREEN, PIN_BUTTON_BLUE};
byte rgbValues[3] = {0, 0, 0};
unsigned long lastButtonPressed;
void setup()
{
for(byte i=0; i<3; i++) {
pinMode(ledPins[i], OUTPUT);
pinMode(buttonPins[i], INPUT);
digitalWrite(ledPins[i], LOW);
}
}
void loop()
{
if ((millis() - lastButtonPressed) >= BUTTON_DEBOUNCE_INTERVAL) {
for(byte i=0; i<3; i++) {
if (digitalRead(buttonPins[i]) == HIGH) {
rgbValues[i]++;
rgbValues[i]%=2;
digitalWrite(ledPins[i], rgbValues[i]);
lastButtonPressed = millis();
break;
}
}
}
}
Im zweiten Experiment werden die Mikrotaster nicht angesteuert, dafür rotieren die einzelnen Farb-Komponenten mittels eines Sinus-Funktion in allen möglichen Intensitäten durch und vermitteln so das gesamte Farbspektrum der RGB-LED.
/**
* © 2018 Christian Grieger
* GNU GENERAL PUBLIC LICENSE
*
* Color rotation for single RGB LED (common cathode)
*/
#define PIN_RED 9
#define PIN_GREEN 10
#define PIN_BLUE 11
#define ROTATE_STEP 0.005
#define COLOR_OFFSET 0.005
byte ledPins[3] = {PIN_RED, PIN_GREEN, PIN_BLUE};
float rgbValues[3] = {0.0, 0.0, 0.0};
void setup()
{
for(byte i=0; i<3; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
void loop()
{
for(byte i=0; i<3; i++) {
rgbValues[i] += (ROTATE_STEP + i*COLOR_OFFSET);
if (rgbValues[i] > 2*PI) {
rgbValues[i] = 0.0;
}
analogWrite(ledPins[i], 127 + round(sin(rgbValues[i])*127));
}
delay(20);
}
zurück