Far­ben­spie­le mit einem LED-Streifen

Lese­zeit: 10 Minu­ten
Navi­ga­ti­on

Der LED-Streifen besteht aus meh­re­ren mit­ein­an­der ver­bun­de­nen RGB-LEDs. Jede besitzt einen eige­nen Con­trol­ler und kann ein­zeln ange­steu­ert wer­den. Er benö­tigt nur einen digi­ta­len Ein­gang.

RGB ist eine Mischung der Far­ben Rot, Grün und Blau. Jede Far­be kann von 0 bis 255 gesetzt wer­den, die Wer­te wer­den durch Kom­ma­ta getrennt.

 ➨Wei­te­re Infor­ma­tio­nen (exter­ner Link)

Bei­spie­le:

Benö­tig­te Bau­tei­le:

  • LED-Streifen
  • Tas­ten­feld 1×4
  • Lei­tungs­dräh­te

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Ach­te auf die Polung. Sie kann bei den LED-Streifen ver­schie­de­ner Her­stel­ler unter­schied­lich sein.

Mit einem klei­nem Pro­gramm kannst du tes­ten, ob das Tas­ten­feld rich­tig ange­schlos­sen ist.
Die gedrück­te Tas­te wird im ➨Seri­el­len Moni­tor ange­zeigt.

/*
  Anschlüsse am Tastenfeld von links nach rechts
  GND D4 D5 D6 D7
*/
int TASTER_EINS = 5;  // Taste 1 
int TASTER_ZWEI = 4;  // Taste 2 
int TASTER_DREI = 7;  // Taste 3 
int TASTER_VIER = 6;  // Taste 4 

void setup() 
{ 
  Serial.begin(9600);    

  // Vorwiderstand aktivieren 
  pinMode(TASTER_EINS, INPUT_PULLUP); 
  pinMode(TASTER_ZWEI, INPUT_PULLUP); 
  pinMode(TASTER_DREI, INPUT_PULLUP); 
  pinMode(TASTER_VIER, INPUT_PULLUP); 
} 

void loop() 
{ 
  if (digitalRead(TASTER_EINS) == LOW) 
  {   
    delay(100); 
    Serial.println("Taste 1 an Pin " + String(TASTER_EINS));        
  } 

  if (digitalRead(TASTER_ZWEI) == LOW)   
  {  
    delay(100);   
    Serial.println("Taste 2 an Pin " + String(TASTER_ZWEI));     
  } 
 
  if (digitalRead(TASTER_DREI) == LOW)  
  {  
    delay(100); 
    Serial.println("Taste 3 an Pin " + String(TASTER_DREI));    
  } 

  if (digitalRead(TASTER_VIER) == LOW)   
  {  
    delay(100);  
    Serial.println("Taste 4 an Pin " + String(TASTER_VIER));    
  } 
}

Das eigent­li­che Pro­gramm:
Als Ers­tes musst du eine Biblio­thek instal­lie­ren:

Jedem Befehl muss der Name des LED-Streifens vor­an­ge­stellt wer­den.

Metho­den der Biblio­thek Adafruit_NeoPixel (Aus­wahl)

Metho­de Funk­ti­on
begin()LED-Streifen star­ten
num­Pi­xels()Anzahl der LEDs lesen
show()LED-Streifen ein­schal­ten
clear()LED-Streifen aus­schal­ten
setPixelColor(LED-Nummer, rot, grün, blau)Far­be einer LED set­zen
LED-Nummer
rot -> 0 - 255
grün -> 0 - 255
blau -> 0 - 255
set­Bright­ness()Hel­lig­keit set­zen (0−255)
Color(rot, grün, blau)Far­be für alle LEDs set­zen
rot -> 0 - 255
grün -> 0 - 255

oder:
Wert „für gepack­tes RGB“ ermit­teln
long Far­be = LEDStreifen.Color(0, 0, 255);
blau -> 0 - 255
fill(gepacktes_RGB, Start, Ende)Far­be für die mit Start und Ende bezeich­ne­ten Pixel set­zen

Die Berech­nung für "gepack­tes RGB":
Far­be = 65536 * Rot + 256 * Grün + Blau
Der Varia­blen­typ muss auf long gesetzt wer­den!

Pro­bie­re die fol­gen­den Bei­spie­le:

Farb­wech­sel

# include <Adafruit_NeoPixel.h>

# define STREIFEN 7

// Anzahl der LEDs -> muss angepasst werden
# define AnzahlLED 15

// LED-Streifen -> Name des LED-Streifens
Adafruit_NeoPixel LEDStreifen = Adafruit_NeoPixel(AnzahlLED, STREIFEN, NEO_GRB 
+ NEO_KHZ800);

void setup()
{
  // setBrightness(0..255)
  LEDStreifen.setBrightness(200);

  // NeoPixel Bibliothek initialisieren
  LEDStreifen.begin();

  LEDStreifen.clear();
  LEDStreifen.show();

  long Farbe;
  Farbe = LEDStreifen.Color(0, 0, 255);
  LEDStreifen.fill(Farbe, 0, AnzahlLED);
  LEDStreifen.show();
  delay(1000);

  Farbe = LEDStreifen.Color(255, 0, 0);
  LEDStreifen.fill(Farbe, 0, AnzahlLED);
  LEDStreifen.show();
  delay(1000);
  LEDStreifen.clear();
  LEDStreifen.show();

}

void loop()
{
  // setBrightness(0..255)
  LEDStreifen.setBrightness(200);

  // NeoPixel Bibliothek initialisieren
  LEDStreifen.begin();
  LEDStreifen.clear();
  LEDStreifen.show();

  long Farbe;

  // rot
  Farbe = LEDStreifen.Color(255, 0, 0);
  LEDStreifen.fill(Farbe, 0, AnzahlLED);
  LEDStreifen.show();
  delay(1000);
  Farbe = LEDStreifen.Color(255, 0, 0);
  LEDStreifen.fill(Farbe, 0, AnzahlLED);
  LEDStreifen.show();
  delay(1000);

  // grün
  Farbe = LEDStreifen.Color(0, 255, 0);
  LEDStreifen.fill(Farbe, 0, AnzahlLED);
  LEDStreifen.show();
  delay(1000);

  // blau
  Farbe = LEDStreifen.Color(0, 0, 255);
  LEDStreifen.fill(Farbe, 0, AnzahlLED);
  LEDStreifen.show();
  delay(1000);

  // gelb
  Farbe = LEDStreifen.Color(255, 255, 0);
  LEDStreifen.fill(Farbe, 0, AnzahlLED);
  LEDStreifen.show();
  delay(1000);

  // pink
  Farbe = LEDStreifen.Color(255, 20, 147);
  LEDStreifen.fill(Farbe, 0, AnzahlLED);
  LEDStreifen.show();
  delay(1000);

  // Pause
  LEDStreifen.clear();
  LEDStreifen.show();
  delay(2000);
}


Far­be rot dim­men

# include <Adafruit_NeoPixel.h>  
int STREIFEN = 8;  

// Anzahl der LEDs -> muss angepasst werden
int AnzahlLED = 15;  

/*
  Initialisierung des LED-Streifens
  Parameter:
  LED-Streifen -> Name des LED-Streifens  
  AnzahlLED -> Anzahl der LEDs
  STREIFEN -> verwendeter Pin
  NEO_GRB + NEO_KHZ800 -> Typ des verwendeten LED-Streifens
*/
Adafruit_NeoPixel  LEDStreifen = Adafruit_NeoPixel(AnzahlLED, STREIFEN, NEO_GRB + NEO_KHZ800); 

void setup()  
{ 
  // NeoPixel Bibliothek initialisieren 
  LEDStreifen.begin();  

  // Helligkeit setzen (0 ... 255)
  LEDStreifen.setBrightness(200); 
} 

void loop()  
{  
  /* rot dimmen   
    die Variable i erhöht den Anteil von rot
    von 0 bis 255
    LEDNummer -> Nummer der LED 
    0 bis numPixels() = Anzahl der LEDs im Streifen
    LEDStreifen.setPixelColor(LEDNummer, LEDStreifen.Color(i, 0, 0)); 
    -> Farbe der LED (LEDNummer) setzen
  */
  for (int i = 0; i < 255; i++)  
  {    
    for (int LEDNummer = 0; LEDNummer < LEDStreifen.numPixels(); LEDNummer++)      
    {   
      LEDStreifen.setPixelColor(LEDNummer, LEDStreifen.Color(i, 0, 0));     
      LEDStreifen.show();  
    } 
  }  

  // Anteil der Farbe verrringern, dadurch ensteht der "Dimm-Effekt"
  for (int i = 255; i > 0; i--)  
  {  
    for (int LEDNummer = 0; LEDNummer < LEDStreifen.numPixels(); LEDNummer++)      
    {          
      LEDStreifen.setPixelColor(LEDNummer, LEDStreifen.Color(i, 0, 0));  
      LEDStreifen.show();  
    } 
  } 

  // LED aus  
  LEDStreifen.clear();  
  LEDStreifen.show();
  delay(1000);
}

Lauf­licht nach Tas­ter­druck
Für das Pro­gramm wird nur die Tas­te 1 des Tas­ten­felds ver­wen­det.

# include <Adafruit_NeoPixel.h> 
int STREIFEN = 8; 

// Taste 1 wird verwendet 
int TASTER = 5; 

// Anzahl der LEDs -> muss angepasst werden
int AnzahlLED = 15; 

// LED-Streifen -> Name des LED-Streifens 
Adafruit_NeoPixel LEDStreifen = Adafruit_NeoPixel(AnzahlLED, STREIFEN, NEO_GRB + NEO_KHZ800); 

void setup() 
{ 
  // NeoPixel Bibliothek initialisieren 
  LEDStreifen.begin();  
  LEDStreifen.setBrightness(200); 
  pinMode(TASTER, INPUT_PULLUP); 
}

void loop() 
{ 
  int TasterLesen = digitalRead(TASTER); 

  // LEDS leuchten solange der Taster gedrückt wird 
  if (TasterLesen == LOW)   
  {  
    int WarteZeit = 100;      
    for (int ii = 0; ii < 3; ii ++)     
    {  
      for (int i = 0; i < LEDStreifen.numPixels(); i += 3)   
      {    
        // jede dritte LED mit blau einschalten          
        LEDStreifen.setPixelColor(i + ii, 0, 0, 255);   
      }   
      LEDStreifen.show();  
      delay(WarteZeit);     
      for (int i = 0; i < LEDStreifen.numPixels(); i += 3)     
      {       
        // jede dritte LED ausschalten           
        LEDStreifen.setPixelColor(i + ii, 0);    
      }  
    }  
  } 

  else   
  {  
    // alle LEDs ausschalten
    LEDStreifen.clear();   
    LEDStreifen.show();  
  } 
}

Wei­te­re Bei­spie­le

Das Ein- und Aus­schal­ten jeder drit­ten LED ergibt eine Art „Jagd­ef­fekt“ der LEDs. Jede Tas­te des Tas­ten­fel­des soll die­sen Effekt bei der jewei­li­gen Far­be star­ten.
Bin­de die benö­tig­te Biblio­thek ein und defi­nie­re die Varia­blen:

# include <Adafruit_NeoPixel.h>

// Pin des LED-Streifens 
int STREIFEN = 8; 

// die Tasten des Tastenfelds
int TASTER_ROT = 5;    // Taste 1 
int TASTER_GRUEN = 4;  // Taste 2 
int TASTER_BLAU = 7;   // Taste 3 
int TASTER_GELB = 6;   // Taste 4 

// Anzahl der LEDs -> muss angepasst werden
int AnzahlLED = 15; 

// LED-Streifen -> Name des LED-Streifens 
Adafruit_NeoPixel LEDStreifen = Adafruit_NeoPixel(AnzahlLED, STREIFEN, NEO_GRB + NEO_KHZ800);

Im setup-Teil wird der LED-Streifen gestar­tet und die Tas­ten des Tas­ten­felds als INPUT_PULLUP defi­niert.

void setup()
{
  // NeoPixel Bibliothek initialisieren
  LEDStreifen.begin();

  LEDStreifen.setBrightness(200);
  
  // Vorwiderstand der Tasten aktivieren
  pinMode(TASTER_ROT, INPUT_PULLUP);
  . . . 
  . . .  
}

Im loop-Teil wer­den die Tas­ten ein­zeln abge­fragt:

 void loop()
 {
   // alle LEDs ausschalten
   LEDStreifen.clear();
   LEDStreifen.show();

   // Taste 1
   if (digitalRead(TASTER_ROT) == LOW)
   {
     int WarteZeit = 100;
     for (int ii = 0; ii < 3; ii ++)
     {
       for (int i = 0; i < LEDStreifen.numPixels(); i += 3)
       {
         // jede dritte LED einschalten
         // 255, 0, 0 -> rot RGB-Farbcode
         LEDStreifen.setPixelColor(i + ii, 255, 0, 0);
       }
       LEDStreifen.show();
       delay(WarteZeit);
       for (int i = 0; i < LEDStreifen.numPixels(); i += 3)
       {
         // jede dritte LED ausschalten
         LEDStreifen.setPixelColor(i + ii, 0);
       }
     }
   }

   // Taste 2
   if (digitalRead(TASTER_GRUEN) == LOW)
   {
     int WarteZeit = 100;
     for (int ii= 0; ii < 3; ii ++)
     {
       for (int i = 0; i < LEDStreifen.numPixels(); i += 3)
       {
         // jede dritte LED einschalten
         // 0, 255, 0 -> grün RGB-Farbcode

         LEDStreifen.setPixelColor(i + ii, 0, 255, 0);
       }
       LEDStreifen.show();
       delay(WarteZeit);
       for (int i = 0; i < LEDStreifen.numPixels(); i += 3)
       {
         // jede dritte LED ausschalten
         LEDStreifen.setPixelColor(i + ii, 0);
       }
     }
   }

   // Taste 3
   if (digitalRead(TASTER_BLAU) == LOW)
   {
     // 0, 0, 255 -> blau RGB-Farbcode
     . . .
     . . .
   }

   // Taste 4
   if (digitalRead(TASTER_GELB) == LOW)
   {
     // 255, 255, 0 -> gelb RGB-Farbcode
     . . .
     . . .
   }
 } 


Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 23. Aug 2020 @ 13:17