

Ein LED-Streifen soll nach Betätigung einer Taste verschiedene Farben anzeigen. Die LEDs sollen in unterschiedlichen Reihenfolgen leuchten.

Der LED-Streifen besteht aus mehreren miteinander verbundenen RGB-LEDs. Jede besitzt einen eigenen Controller und kann einzeln angesteuert werden. Er benötigt nur einen digitalen Eingang.
RGB ist eine Mischung der Farben Rot, Grün und Blau. Jede Farbe kann von 0 bis 255 gesetzt werden, die Werte werden durch Kommata getrennt.

Hier findest du einen Überblick über die 🔗 RGB-Farbcodes (externer Link abgerufen am 25.4.22).
Beispiele:

Benötigte Bauteile:
- LED-Streifen
- Tastenfeld 1×4
- Leitungsdrähte

Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)

Achte auf die Polung. Sie kann bei den LED-Streifen verschiedener Hersteller unterschiedlich sein.


Mit einem kleinem Programm kannst du testen, ob das Tastenfeld richtig angeschlossen ist.
Die gedrückte Taste wird im ➨Seriellen Monitor 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) {;}
// 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 eigentliche Programm:
Als Erstes musst du eine Bibliothek installieren:
Arduino IDE 1.8x


Arduino IDE 2.x


Jedem Befehl muss der Name des LED-Streifens vorangestellt werden.
Methoden der Bibliothek Adafruit_NeoPixel (Auswahl)
Methode | Funktion |
---|---|
begin() | LED-Streifen starten |
numPixels() | Anzahl der LEDs lesen |
show() | LED-Streifen einschalten |
clear() | LED-Streifen ausschalten |
setPixelColor(LED-Nummer, rot, grün, blau) | Farbe einer LED setzen LED-Nummer rot -> 0 - 255 grün -> 0 - 255 blau -> 0 - 255 |
setBrightness() | Helligkeit setzen (0−255) |
Color(rot, grün, blau) | Farbe für alle LEDs setzen rot -> 0 - 255 grün -> 0 - 255 oder: Wert „für gepacktes RGB“ ermitteln long Farbe = LEDStreifen.Color(0, 0, 255); blau -> 0 - 255 |
fill(gepacktes_RGB, Start, Ende) | Farbe für die mit Start und Ende bezeichneten Pixel setzen Berechnung für "gepacktes RGB" Farbe = 65536 * Rot + 256 * Grün + Blau |
Die Berechnung für "gepacktes RGB":
Farbe = 65536 * Rot + 256 * Grün + Blau
Der Variablentyp muss auf long gesetzt werden!
Probiere die folgenden Beispiele:

Farbwechsel
# include <Adafruit_NeoPixel.h>
# define STREIFEN 8
// 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);
}
Farbe 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);
}
Lauflicht nach Tasterdruck
Für das Programm wird nur die Taste 1 des Tastenfelds verwendet.
# 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();
}
}

Das Ein- und Ausschalten jeder dritten LED ergibt eine Art „Jagdeffekt“ der LEDs. Jede Taste des Tastenfeldes soll diesen Effekt bei der jeweiligen Farbe starten.
Binde die benötigte Bibliothek ein und definiere 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 setup-Teil wird der LED-Streifen gestartet und die Tasten des Tastenfelds 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);
. . .
. . .
}
Im loop-Teil werden die Tasten einzeln 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
// 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
. . .
. . .
}
}
Verwandte Aufgaben:
- Blinkende LED
- Blinkende LED mit einem Potentiometer
- Blinkende LEDs mit Multithreading
- Interrupt - Lauflicht mit Drehgeber
- Interrupt: Farbenspiel mit einem NeoPixel-Ring
- Lauflicht
- Lauflicht mit blinkenden LEDs
- LED mit einem Relais schalten
- LEDs mit dem UDP-Protokoll im LAN schalten
- LEDs ohne Pulsweitenmodulation dimmen
- LEDs schalten mit PORT/DDR
- LEDs mit dem Schieberegister 74HC595 steuern
- LEDs mit einem Taster steuern
- Licht schalten mit dem Hall-Sensor 1881
- Wechselblinker
- Würfeln mit LEDs
Letzte Aktualisierung: