2.4 - RGB LED Fader
Der Vollständigkeit halber, zeige ich euch auch noch wie man die LEDs zum Faden/pulsieren bringt (Breathing Effect). Das gehört jetzt eigentlich nicht direkt unter RGB LEDs, da es auch mit einfarbigen funktioniert, aber ich finde der Effekt sieht im Computer Bereich einfach super aus.
Um den RGB LEDs gerecht zu werden, kann man verschiedene Farben mit einem Taster durchschalten, ähnlich wie im Tutorial 2.1
Um den RGB LEDs gerecht zu werden, kann man verschiedene Farben mit einem Taster durchschalten, ähnlich wie im Tutorial 2.1
Programm 0 = LEDs aus
Programm 1 = LEDs faden Blau
Programm 2 = LEDs faden Rot
Programm 3 = LEDs faden Grün
Programm 4 = LEDs faden Lila
Programm 1 = LEDs faden Blau
Programm 2 = LEDs faden Rot
Programm 3 = LEDs faden Grün
Programm 4 = LEDs faden Lila
Teileliste
-
Arduino IDE (Tutorial wurde mit 1.6 erstellt)
-
Arduino Uno (oder ein anderes Modell)
-
12V Netzteil (das ist nur ein Beispiel! Bitte wählt ein ausreichend starkes Netzteil je nach benötigter Leistung)
-
alternativ 12V Computer Netzteil
-
3x N-Chanal Transistor/Mosfet (z.B. IRFZ44N oder IRFZ34N)
Anschlussplan
Code
//Konstanten const int tasterPin = 2; // Taster an Pin 2 angeschlossen const int blauPin = 9; // Blaue LED an Pin 9 angeschlossen const int rotPin = 10; // Rote LED an Pin 10 angeschlossen const int gruenPin = 11; // Gruene LED an Pin 11 angeschlossen const int fadeGeschw = 30; // Variable für die Geschwindigkeit. Niedriger Wert schnell, hoher wert langsam //Variablen int lichtmodus = 0; // Variable für die verschiedenen festgelegten Farben void setup() { pinMode(rotPin, OUTPUT); // Setzt den LEDPin als Ausgang pinMode(gruenPin, OUTPUT); // Setzt den LEDPin als Ausgang pinMode(blauPin, OUTPUT); // Setzt den LEDPin als Ausgang pinMode(tasterPin, INPUT); // Setzt den TasterPin als Eingang } void loop() { //+++++++++++++++ LEUCHTPROGRAMME +++++++++++++++++ // Modus 0 = Licht aus if (lichtmodus == 0) { analogWrite(blauPin, 0); // Schaltet die Blaue LED ab analogWrite(rotPin, 0); // Schaltet die Rote LED ab analogWrite(gruenPin, 0); // Schaltet die Grüne LED ab Tastendruck(); } // Modus 1 = Blau if (lichtmodus == 1) { for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { analogWrite(blauPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) Tastendruck(); // Abfrage des Tasterstatus // Falls Taster gedrückt ist, die "for" Schleife verlassen if(lichtmodus != 1) { break; // "for" Schleife verlassen } delay(fadeGeschw); // warte 30ms für einen Schritt weiter } for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { analogWrite(blauPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) Tastendruck(); // Abfrage des Tasterstatus // Falls Taster gedrückt ist, die "for" Schleife verlassen if(lichtmodus != 1) { break; // "for" Schleife verlassen } delay(fadeGeschw); // warte 30ms für einen Schritt weiter } } // Modus 2 = Rot if (lichtmodus == 2) { analogWrite(blauPin, 0); // Schaltet die Blaue LED ab analogWrite(gruenPin, 0); // Schaltet die Grüne LED ab for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { analogWrite(rotPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) Tastendruck(); // Abfrage des Tasterstatus // Falls Taster gedrückt ist, die "for" Schleife verlassen if(lichtmodus != 2) { break; // "for" Schleife verlassen } delay(fadeGeschw); // warte 30ms für einen Schritt weiter } for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { analogWrite(rotPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) Tastendruck(); // Falls Taster gedrückt ist, die "for" Schleife verlassen // Falls Taster gedrückt ist, die "for" Schleife verlassen if(lichtmodus != 2) { break; // "for" Schleife verlassen } delay(fadeGeschw); // warte 30ms für einen Schritt weiter } } // Modus 3 = Grün if (lichtmodus == 3) { analogWrite(blauPin, 0); // Schaltet die Blaue LED ab analogWrite(rotPin, 0); // Schaltet die Rote LED ab for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { analogWrite(gruenPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) Tastendruck(); // Falls Taster gedrückt ist, die "for" Schleife verlassen // Falls Taster gedrückt ist, die "for" Schleife verlassen if(lichtmodus != 3) { break; // "for" Schleife verlassen } delay(fadeGeschw); // warte 30ms für einen Schritt weiter } for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { analogWrite(gruenPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) Tastendruck(); // Falls Taster gedrückt ist, die "for" Schleife verlassen // Falls Taster gedrückt ist, die "for" Schleife verlassen if(lichtmodus != 3) { break; // "for" Schleife verlassen } delay(fadeGeschw); // warte 30ms für einen Schritt weiter } } // Modus 4 = Gelb if (lichtmodus == 4) { analogWrite(blauPin, 0); // Schaltet die Blaue LED ab analogWrite(rotPin, 0); // Schaltet die Rote LED ab analogWrite(gruenPin, 0); // Schaltet die Grüne LED ab for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { analogWrite(rotPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) analogWrite(gruenPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) Tastendruck(); // Abfrage des Tasterstatus // Falls Taster gedrückt ist, die "for" Schleife verlassen if(lichtmodus != 4) { break; // "for" Schleife verlassen } delay(fadeGeschw); // warte 30ms für einen Schritt weiter } for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { analogWrite(rotPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) analogWrite(gruenPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) Tastendruck(); // Abfrage des Tasterstatus // Falls Taster gedrückt ist, die "for" Schleife verlassen if(lichtmodus != 4) { break; // "for" Schleife verlassen } delay(fadeGeschw); // warte 30ms für einen Schritt weiter } } // Modus 5 = Lila if (lichtmodus == 5) { analogWrite(blauPin, 0); // Schaltet die Blaue LED ab analogWrite(rotPin, 0); // Schaltet die Rote LED ab analogWrite(gruenPin, 0); // Schaltet die Grüne LED ab for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { analogWrite(rotPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) analogWrite(blauPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) Tastendruck(); // Falls Taster gedrückt ist, die "for" Schleife verlassen // Falls Taster gedrückt ist, die "for" Schleife verlassen if(lichtmodus != 5) { break; // "for" Schleife verlassen } delay(fadeGeschw); // warte 30ms für einen Schritt weiter } for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { analogWrite(rotPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) analogWrite(blauPin, fadeValue); // Gibt das fadeValue am LedPin aus (PWM) Tastendruck(); // Falls Taster gedrückt ist, die "for" Schleife verlassen // Falls Taster gedrückt ist, die "for" Schleife verlassen if(lichtmodus != 5) { break; // "for" Schleife verlassen } delay(fadeGeschw); // warte 30ms für einen Schritt weiter } } } void Tastendruck() { // Abfrage ob der Taster gedrückt ist int tasterStatus = digitalRead(tasterPin); //Wenn Taster gedrückt ist, Leuchtmodus +1 if (tasterStatus == HIGH) { lichtmodus = lichtmodus++; delay(200); } // Anzahl der Lichtmodi auf 6 begrenzen. (0 bis 5) if (lichtmodus == 6) { lichtmodus = 0; } }
In diesem Teil wird auch wieder mit dem schon bekannten for Schleife gearbeitet um die LEDs zum pulsieren zu bringen. Das bringt aber auch ein Problem beim erkennen des Tastendrucks mit sich. Aber eins nach dem Anderen 

Die Farben werden mit der Variable lichtmodus unterschieden. Das Programm startet im lichtmodus 0. Hier sind die LEDs durch den analogWrite(LED, 0) Befehl ausgeschalten.
Durch den Befehl Tastendruck() wird der Code ganz unten im Sketch unter "void Tastendruck()" ausgeführt. Hier wird ausgelesen ob der Taster gedrückt ist. Wenn ja wird der lichtmodus um +1 hochgezählt.
Falls der lichtmodus durch mehrmaliges drücken des Tasters bei 6 ankommt, springt er automatisch wieder auf 0, was LEDs aus bedeutet.
Eine Befehlskette wie "void Tastendruck()" wird dann erstellt, wenn man z.B. diesen Code öfters im Sketch benötigt. So spart man sich arbeit und der Sketch bleibt übersichtlicher, da wenn benötigt im Sketch nur Tastendruck() eingegeben wird und so die Befehlskette ausgeführt wird.
So, weiter im Sketch.
Wenn im lichtmodus == 0 der Taster gedrückt wird, springt der lichtmodus auf 1 und das Programm für blaues pulsieren beginnt.
Jetzt startet die erste for Schleife.
Hier wird die Variable fadeValue erstellt und deren Wert auf 0 gesetzt. Jetzt wird abgefragt ob fadeValue kleiner als 255 ist und wenn ja, dann wird die Variable fadeValue um +5 hochgezählt.
Die for Schleife wird so lange ausgeführt, bis fadeValue 255 ist. Dann ist sie beendet und der normale Sketch wird fortgeführt.
In der for Schleife wird der Wert von fadeValue als PWM Signal mittels des Befehls analogWrite ausgegeben und so die Helligkeit der LED verändert. Jetzt wird per Tastendruck() abgefragt ob der Taster gedrückt ist und im Fall leuchtmodus +1 hochgesetzt.
Es ist wichtig den Taster während der forSchleife abzufragen, da ein Tastendruck sonst erst erkannt wird, wenn die for Schleife zuende ist und wieder der normale Sketch abläuft.
Wenn jetzt erkannt wird, dass lichtmodus nicht mehr 1 ist, wird die for Schleife mit dem Befehl break; abgebrochen und der Sketch fortgeführt, so das wir uns jetzt im nächsten lichtmodus befinden und das selbe mit der roten LED passiert. Ansonsten geht die for Schleife weiter, bis sie zuende ist und wechselt dann zur nächsten for Schleife um die LED wieder zu dimmen. So wird der Effekt des pulsierens erreicht.
Das war es auch schon 

Einen Kommentar verfassen
Einloggen um Kommentare zu verfassen
Als Gast kommentieren