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

Lese­zeit: 9 Minu­ten

Lösung
Seite als PDF

Ein LED-Strei­fen soll nach Betä­ti­gung einer Tas­te ver­schie­de­ne Far­ben anzei­gen. Die LEDs sol­len in unter­schied­li­chen Rei­hen­fol­gen leuchten. 

Der LED-Strei­fen 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 Eingang.

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.

 Hier fin­dest du einen Über­blick über die 🔗RGB-Farb­codes (exter­ner Link abge­ru­fen am 09.08.23).

Bei­spie­le:

Benö­tig­te Bauteile:

  • LED-Strei­fen
  • 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-Strei­fen 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 angezeigt.

/*
  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);
  
  // auf serielle Verbindung warten
  while (!Serial) {;}  

  // INPUT_PULLUP -> Eingangspegel auf HIGH setzen 
  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 installieren:

Sketch → Biblio­thek ein­bin­den → Biblio­the­ken verwalten

Jedem Befehl muss der Name des LED-Strei­fens vor­an­ge­stellt werden.

Funk­tio­nen der Biblio­thek Adafruit_NeoPixel (Aus­wahl)

Schlüs­sel­wortAkti­on
begin()LED-Ring star­ten
num­Pi­xels()Anzahl der LEDs lesen
show()LED-Ring ein­schal­ten
clear()LED-Ring aus­schal­ten
setPixelColor(LED-Nummer, rot, grün, blau)Far­be einer LED setzen
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 setzen
rot -> 0 - 255
grün -> 0 - 255
blau -> 0 - 255

Bei­spiel rot:
int Far­be = LEDStreifen.Color(255, 0, 0);

Bei­spiel grün:
int Far­be = LEDStreifen.Color(0, 255, 0);

Bei­spiel blau:
int Far­be = LEDStreifen.Color(0, 0, 255);
fill(Farbe, Start, Ende)Far­be für die mit Start und Ende bezeich­ne­ten Pixel setzen

Pro­bie­re die fol­gen­den Beispiele:

Farb­wech­sel

# include "Adafruit_NeoPixel.h"
# define STREIFEN 8

// Anzahl der LEDs -> muss angepasst werden
# define 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()
{
  // setBrightness(0..255)
  LEDStreifen.setBrightness(200);

  // NeoPixel Bibliothek initialisieren
  LEDStreifen.begin();
}

void loop()
{
  LEDStreifen.clear();
  LEDStreifen.show();
  
  int Farbe;

  // rot
  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 dimmen

# 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 verwendet. 

# include "Adafruit_NeoPixel.h"
int STREIFEN = 8; 

// Taste 1 wird verwendet 
int TASTER = 5; 

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

/*
  Initialisierung des LED-Streifens
  Parameter:
  LEDStreifen -> 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();  
  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 Beispiele

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

# 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 set­up-Teil wird der LED-Strei­fen gestar­tet und die Tas­ten des Tas­ten­felds als INPUT_PULLUP definiert.

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

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

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

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
        LEDStreifen.setPixelColor(i + ii, 200, 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
        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)
  {
    int WarteZeit = 100;

    for (int ii = 0; ii < 3; ii++)
    {
      for (int i = 0; i < LEDStreifen.numPixels(); i += 3)
      {
        // jede dritte LED 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);
      }
    }
  }

  // Taste 4
  if (digitalRead(TASTER_GELB) == LOW)
  {
    int WarteZeit = 100;
    for (int ii = 0; ii < 3; ii++)
    {
      for (int i = 0; i < LEDStreifen.numPixels(); i += 3)
      {
        // jede dritte LED einschalten
        // zufällige Farbe
        LEDStreifen.setPixelColor(i + ii, 255, 255, 0);
      }

      LEDStreifen.show();
      delay(WarteZeit);

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

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 25. Mrz 2024 @ 11:30