Das „RGB Fade“ Programm macht schöne Farbwechsel der RGB LED und zeigt
Die Farbmischung wirkt schöner wenn man einen Diffusor über die LED legt (Butterbrotpapier oder ähnliches) anstatt direkt in die LED zu schauen.
/** * Dieses Programm wechselt in zufälliger Folge die Helligkeitswerte der 3 Farben der RGB LED. * Dadurch mischen sich theoretisch alle möglichen Farbverläufe irgendwann einmal zusammen. * Es entsteht ein schöner Farbeffekt. * In dieser Funktion ist neu: * - Verwendung der Zufallsfunktion random() * - Verwendung von Unterfunktionen mit Übergabeparameter * - Die do{} while() Schleife * - manipulieren von Zählerständen */ const int red = 9; // Pin für rot in RGB LED const int green = 10; // Pin für grün in RGB LED const int blue1 = 5; // Pin für erstes blau in RGB LED const int blue2 = 6; // Pin für zweites blau in RGB LED long randnum; // Variable für den Zufallswert int redBRT; // Helligkeitswert rot (BRT = brightness) int greenBRT; // Helligkeitswert grün int blue1BRT; // Helligkeitswert blau1 int blue2BRT; // Helligkeitswert blau2 void setup () { pinMode (red, OUTPUT); pinMode (green, OUTPUT); pinMode (blue1, OUTPUT); pinMode (blue2, OUTPUT); randomSeed (analogRead (0)); // Initialisieren der random() Funktion mit einem Wert des nicht angeschlossenen analogen Port A0 } /* Die fade() Funktion erhöht bzw. verringert die PWM Frequenz vom aktuellen Wert zum erzeugten Zufallswert. Dadurch entsteht der Effekt des "fading in/out" also aufblenden und abblenden der Helligkeit. Übergabeparameter: int pin: enthällt den Ausgangspin der verändert werden soll int brt: enthällt den aktuellen Ausgangswert der Helligkeit des Pin */ int fade (int pin, int brt) { // Übergabe der zwei Werte randnum = random (0,256); // erzeugt einen Zufallswert zwischen 0 (inklusive der 0) und 255 (obere Grenze muss 1 höher sein als Maximalwert) do { // Start der do{} while() Schleife if (brt < randnum) { // Wenn aktueller Helligkeit kleiner als neuer maximaler Helligkeitswert (aufblenden) brt++; // erhöhe Helligkeitswert um eins. Langform: "brt=brt+1". Möglich ist auch "brt+=1" } else { // Wenn aktueller Helligkeit größer als neuer maximaler Helligkeitswert (abblenden) brt--; // verringere Helligkeitswert um eins. Langform: "brt=brt-1". Möglich ist auch "brt-=1" } analogWrite (pin, brt); // setzt neuen Helligkeitswert delay (10); // Pause in Millisekunden. Diese Zeit verändert die Geschwindigkeit mit der auf- und abgeblendet wird } while (brt != randnum); // Bedingung der do() Schleife: Mache das do() solange bis Bedingung erfüllt ist (hier: aktuelle Helligkeit = Zufallszahl) return brt; // Rückgabewert der Funktion fade(). Der Wert dieser Variable wird zurückgegeben. } void loop () { redBRT = fade (red, redBRT); // Aufruf der fade() Funktion mit Übergabeparameter. Parameter 1: aktueller Port, Parameter 2: aktueller Helligkeitswert // Der Rückgabewert der fade() Funktion wird in der Variable vor dem Aufruf gespeichert. blue1BRT = fade (blue1, blue1BRT); // gleicher Aufruf wie oben nur unterschiedliche Parameter greenBRT = fade (green, greenBRT); // s.o. blue2BRT = fade (blue2, blue2BRT); // s.o. }