Langsames Farbwechseln einer Dreifarb-LED



Es gibt LEDs, da sind gleich mehrere Farben eingebaut. Sind dies die Farben Rot, Grün und Blau kann man sehr viele verschiedene Farbtöne zusammenmischen.

Will man einen langsamen Farbwechsel vieler Farben, sind die Beinchen der LED an PWM-Pins des Arduino anzuschließen und an diesen Pins PWM-Werte mit analogWrite-Befehlen auszugeben.


Ich benutze für dieses Experiment folgende Dreifarb-LED:


          
Das lange Beinchen ist der GND-Anschluss.



  Schaltplan
  R1 = 220 Ohm

        //LEDs an Pins 9, 10 und 11:
        int blauPin = 9;
        int gruenPin = 10;
        int rotPin = 11;

        //PWM-Werte:
        int blauWert = 0;
        int gruenWert = 0;
        int rotWert = 0;

        //"Geschwindigkeit":
        int zeit = 10;  //Zahl größer ==> Farbwechsel langsamer

        boolean ersterDurchlauf = true;


        void setup() {
          pinMode(rotPin, OUTPUT);
          pinMode(gruenPin, OUTPUT);
          pinMode(blauPin, OUTPUT);
        }


        void loop() {
        
          //Nur beim ersten Durchlauf: Start mit Blau
          if (ersterDurchlauf == true) {
            for (blauWert = 0; blauWert < 255; blauWert++) {
              analogWrite(blauPin, blauWert);
              delay(zeit);
            }
            ersterDurchlauf = false;
          }

          //Blau ==> Lila
          for (rotWert = 0; rotWert < 255; rotWert++) {
            analogWrite(rotPin, rotWert);
            delay(zeit);
          }

          //Lila ==> Rot
          for (blauWert = 255; blauWert > 0; blauWert--) {
            analogWrite(blauPin, blauWert);
            delay(zeit);
          }

          //Rot ==> Gelb
          for (gruenWert = 0; gruenWert < 255; gruenWert++) {
            analogWrite(gruenPin, gruenWert);
            delay(zeit);
          }

          //Gelb ==> Gruen
          for (rotWert = 255; rotWert > 0; rotWert--) {
            analogWrite(rotPin, rotWert);
            delay(zeit);
          }

          //Gruen ==> Petrol
          for (blauWert = 0; blauWert < 255; blauWert++) {
            analogWrite(blauPin, blauWert);
            delay(zeit);
          }

          //Petrol ==> Blau
          for (gruenWert = 255; gruenWert > 0; gruenWert--) {
            analogWrite(gruenPin, gruenWert);
            delay(zeit);
          }
        }