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.

RGB_Fade.ino
/**
 * 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.
}
f11/technik/arduino/programme/rgb-fade.txt · Zuletzt geändert: 2019/09/29 12:03 (Externe Bearbeitung)
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0