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
 
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 
 
 
 
 

Teileliste

 
 
 
 

Anschlussplan

 
Anschlussplan 2.4     Schaltplan 2.1
 
 
 
 
 

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  fertig
 
 
 
 
downloadbutton arduino
 
 
 
 
 

Seitennavigation
 
arrow button prev               arrow button up                          

Einen Kommentar verfassen

Als Gast kommentieren

0
  • Keine Kommentare gefunden