RGB LED stufenloser Farbwechsel

In diesem Artikel beschreibe ich eine Technik, mit der man RGB-LEDs, d.h. LEDs die alle Farben des RGB-Farbraums darstellen können, auf die jeweilige Farbei stufenlos einzustellt.

Erklärung

Eine RGB-LED kann die verschiedensten Farben darstellen, welche über Rot, Grün und Blau zusammengemischt werden. Als Verbesserung des Espruino-Tutorials habe ich einen stufenlosen Farbwechsel eingebaut und verschiedene Farben für die Anzeige vordefiniert. Damit kann man die volle Leistung aus einer RGB-LED herauskitzeln.

Schaltungsaufbau

RGB LEDs schalten

 

Verbindungsübersicht

RGB-LED Kabel Espruino
Fuß für Kathode GND
Fuß für Rot C7
Fuß für Grün C8
Fuß für Blau C9

Programmcode

Im ersten Teil wird die Pin-Belegung festgelegt und das dictionary colors enthält den Farbnamen und den zugehörigen Farbwert [R,G,B]=[255,0,0]=rot. Die Funktion setColor(red, green, blue) schreibt die ihr übergebenen Farbwerte. Der dynamische Wechsel erfolgt über dim(color). Die Funktion setColor(red, green, blue) pulst die jeweilige Farbe mit (PWM bzw. pulse-width-modulation kommt zum Einsatz):

analogWrite(redPin, red / 255, {freq:70});

Dabei ist „red / 255“ der Duty-Cycle und „{freq:70}“ die Frequenz mit der gepulst wird. Eine schöne Erklärung findet man in einem Youtube Video:

Hier der Quellcode:

var redPin = C7;
var greenPin = C8;
var bluePin = C9;
var red=0;
var green=0;
var blue=0;
var colors = {red:[255,0,0],green:[0,255,0],blue:[0,0,255], purple:[80, 0, 80], yellow:[255, 255, 0], aqua:[0, 255, 255], white:[255, 255, 255]};
function setColor(red, green, blue) {
 analogWrite(redPin, red / 255, {freq:70});
 analogWrite(greenPin, green / 255, {freq:70});
 analogWrite(bluePin, blue / 255, {freq:70});
 //print(red,green,blue);
}
function dim(color){
 r=color[0];
 g=color[1];
 b=color[2];
 if (int !== "undefined") {
 clearInterval(int);
 //print("lösche int");
 }
 var int = setInterval(function(){
 var flag1;
 var flag2;
 var flag3;
 if (red > r) {
 red=red-5;
 } else if (red < r) {
 red=red+5;
 } else {
 flag1=1;
 }
 if (green > g) {
 green=green-5;
 } else if (green < g) {
 green=green+5;
 } else {
 flag2=1;
 }
 if (blue > b) {
 blue=blue-5;
 } else if (blue < b) {
 blue=blue+5;
 } else {
 flag3=1;
 }
 setColor(red, green, blue);
 if (flag1&&flag2&&flag3){
 //print("return");
 clearInterval(int);
 return true;
 }
 },50);
}

Die Farben werden wie folgt angezeigt:

//zeigt rot
dim(colors.red);
//zeigt gelb
dim(colors.yellow);

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert