Far­ben­spie­le mit einer RGB-LED

Lese­zeit: 6 Minu­ten

Lösung
Seite als PDF

Die Tas­ten eines Tas­ten­fel­des sol­len dazu die­nen, die Far­ben rot, grün und blau einer RGB-LED mit der ➨Puls­wei­ten­mo­du­la­ti­on zu schalten.

So sieht es aus:

Eine RGB-LED besitzt 3 klei­ne LEDs in den Grund­far­ben rot, grün und blau. Der län­ge­re Pin ist ent­we­der - (Com­mon Catho­de) oder + (Com­mon Anode). Die abge­bil­de­te LED wird an GND (-) ange­schlos­sen, die Ver­si­on mit Com­mon Anode wird an den 5 Volt Anschluss gesteckt.Die ver­wen­de­te Ver­si­on kannst du durch ein­fa­ches Umste­cken (GND/5V) her­aus­fin­den.

Die Hel­lig­keit wird mit ent­spre­chend der gemes­se­nen Span­nung gere­gelt: 0 (0 Volt) → aus. 255 → an (5 Volt). 

RGB ist eine Mischung der Far­ben Rot, Grün und Blau. Jede Far­be kann von 0 bis 255 gesetzt wer­den, die Wer­te wer­den durch Kom­ma­ta getrennt. Dies funk­tio­niert mit der ➨Puls­wei­ten­mo­du­la­ti­on

Benö­tig­te Bauteile:

  • RGB-LED
  • 3 Wider­stän­de 220 Ω
  • Tas­ten­feld 1×4
  • Lei­tungs­dräh­te

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Du kannst die Schal­tung auch mit ➨Tas­tern aufbauen.

Ob du die Schal­tung der RGB-LED rich­tig auf­ge­baut hast, kannst du mit die­sem Pro­gramm testen:

// Farbe rot an Pin 11
int LEDrot = 11;

// Farbe grün an Pin 10
int LEDgruen = 10;

// Farbe blau an Pin 9
int LEDblau = 9;

void setup() 
{   
  pinMode(LEDrot, OUTPUT);
  pinMode(LEDgruen, OUTPUT); 
  pinMode(LEDblau, OUTPUT); 
} 

void loop() 
{ 
  analogWrite(LEDrot, 255); 
  delay(1000); 
  analogWrite(LEDrot, 0); 
  analogWrite(LEDgruen, 255);
  delay(1000); 
  analogWrite(LEDgruen, 0);  
  analogWrite(LEDblau, 255); 
  delay(1000); 
  analogWrite(LEDblau, 0); 
}

Far­ben mit PWM dimmen:

int LEDblau = 9; 
int LEDgruen = 10; 
int LEDrot = 11; 


void setup() 
{ 
  pinMode (LEDblau, OUTPUT);
  pinMode(LEDgruen, OUTPUT); 
  pinMode(LEDrot, OUTPUT); 
}

void loop()
{
  // rot heller
  for (int i = 0; i < 250; i += 10)  
  { 
    analogWrite(LEDrot, i);  
    delay(200);   
  }
  
  // rot dunkler
  for (int i = 250; i > 0; i -= 10)  
  { 
    analogWrite(LEDrot, i);  
    delay(200);   
  }

  // grün heller
  for (int i = 0; i < 250; i += 10)  
  { 
    analogWrite(LEDgruen, i);  
    delay(200);   
  }
  
  // grün dunkler
  for (int i = 250; i > 0; i -= 10)  
  { 
    analogWrite(LEDgruen, i);  
    delay(200);   
  }

   // blau heller
  for (int i = 0; i < 250; i += 10)  
  { 
    analogWrite(LEDblau, i);  
    delay(200);   
  }
  
  // blau dunkler
  for (int i = 250; i > 0; i -= 10)  
  { 
    analogWrite(LEDblau, i);  
    delay(200);   
  }
}

Mit einem klei­nem Pro­gramm kannst du tes­ten, ob das Tas­ten­feld rich­tig ange­schlos­sen ist.
Die gedrück­te Tas­te wird im ➨Seri­el­len Moni­tor angezeigt.

/*
  Anschlüsse am Tastenfeld von links nach rechts
  GND D4 D5 D6 D7
*/
int TASTER_EINS = 5;  // Taste 1 
int TASTER_ZWEI = 4;  // Taste 2 
int TASTER_DREI = 7;  // Taste 3 
int TASTER_VIER = 6;  // Taste 4 

void setup() 
{ 
  Serial.begin(9600);    

  // INPUT_PULLUP -> Eingangspegel auf HIGH setzen 
  pinMode(TASTER_EINS, INPUT_PULLUP); 
  pinMode(TASTER_ZWEI, INPUT_PULLUP); 
  pinMode(TASTER_DREI, INPUT_PULLUP); 
  pinMode(TASTER_VIER, INPUT_PULLUP); 
} 

void loop() 
{ 
  if (digitalRead(TASTER_EINS) == LOW) 
  {   
    delay(100); 
    Serial.println("Taste 1 an Pin " + String(TASTER_EINS));        
  } 

  if (digitalRead(TASTER_ZWEI) == LOW)   
  {  
    delay(100);   
    Serial.println("Taste 2 an Pin " + String(TASTER_ZWEI));     
  } 
 
  if (digitalRead(TASTER_DREI) == LOW)  
  {  
    delay(100); 
    Serial.println("Taste 3 an Pin " + String(TASTER_DREI));    
  } 

  if (digitalRead(TASTER_VIER) == LOW)   
  {  
    delay(100);  
    Serial.println("Taste 4 an Pin " + String(TASTER_VIER));    
  } 
}

Jeder Tas­ten­druck soll eine Far­be schritt­wei­se hel­ler machen.
Set­ze die Variablen:

int LEDblau = 9; 
int LEDgruen = 10; 
int LEDrot = 11; 

int TASTER_ROT = 5;   // Taste 1 
int TASTER_GRUEN = 4; // Taste 2 
int TASTER_BLAU = 7;  // Taste 3 

// die Farben 
int rot = 0; 
int gruen = 0; 
int blau = 0;

Akti­vie­re im set­up-Teil den Vor­wi­der­stand für die Taster:

void setup() 
{ 
  pinMode (LEDblau, OUTPUT);
  pinMode(LEDgruen, OUTPUT); 
  pinMode(LEDrot, OUTPUT); 

  // INPUT_PULLUP -> Eingangspegel auf HIGH setzen 
  pinMode(TASTER_ROT, INPUT_PULLUP); 
  pinMode(TASTER_GRUEN, INPUT_PULLUP); 
  pinMode(TASTER_BLAU, INPUT_PULLUP); 
}

Der loop-Teil fragt jeden Tas­ter ab.
Zum Schluss musst du noch die LEDs mit dem durch das Betä­ti­gen der Tas­te ein­ge­stell­ten Wert zum Leuch­ten bringen.

void loop()
{
  if (digitalRead(TASTER_ROT) == LOW)   
  {  
    rot ++;  

    // Wert darf 255 nicht übersteigen -> auf 0 setzen  
    if (rot > 255) rot = 0;   
  } 

  if (digitalRead(TASTER_GRUEN) == LOW)   
  { 
    gruen ++;

    // Wert darf 255 nicht übersteigen-> auf 0 setzen
    if (gruen > 255) gruen = 0;   
  }  

  if (digitalRead(TASTER_BLAU) == LOW)  
  { 
    blau ++;

    // Wert darf 255 nicht übersteigen -> auf 0 setzen
    if (blau > 255) blau = 0; 
  }  

  analogWrite(LEDrot, rot);
  analogWrite(LEDgruen, gruen);
  analogWrite(LEDblau, blau);
  delay(20);
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 11. Dez 2023 @ 12:41