====== RGB Fade (Farbwechsel) ====== Das "RGB Fade" Programm macht schöne Farbwechsel der RGB LED und zeigt * Verwendung der Zufallsfunktion random() * Verwendung von Unterfunktionen mit Übergabeparameter * Die do() while{} Schleife * manipulieren von Zählerständen 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. }