
Ziel des Projekts
Die beiden Taster sollen je eine Folge von leuchtenden LEDs in verschiedenen Farben auslösen. Dabei soll der jeweils andere Taster den Programmablauf unterbrechen und „seine“ Folge leuchtender LEDs starten.
- linker Taster: die LEDs drehen nach links
- rechter Taster: die LEDs bewegen sich im Uhrzeigersinn

Info zu RGB-LEDs

Der NeoPixel-Ring besteht aus mehreren miteinander verbundenen RGB-LEDs. Jede besitzt einen eigenen Controller und kann einzeln angesteuert werden. Er benötigt nur einen digitalen Eingang. Der NeoPixel-Ring ist in verschiedenen Bauformen zwischen 12 und 60 LEDs erhältlich.
Die Programmierung unterscheidet sich nicht. Es muss nur die Anzahl der LEDs angepasst werden.
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.

🔗RGB-Codes (externer Link abgerufen am 29.06.25)
Beispiele:

Benötigte Bauteile:
- NeoPixel-Ring
- 2 Taster
- Leitungsdrähte
Der Schaltplan
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)

Achte auf die Polung. Sie kann bei den NeoPixel-Ringen verschiedener Hersteller unterschiedlich sein.
Jede LED kann einzeln angesprochen werden.
Die Zählung beginnt mit 0!
Benötigte Bibliothek:
Sketch ⇒ Bibliothek einbinden ⇒ Bibliotheken verwalten

Funktionen der Bibliothek Adafruit_NeoPixel (Auswahl)
| Schlüsselwort | Aktion |
|---|---|
| begin() | LED-Ring starten |
| numPixels() | Anzahl der LEDs lesen |
| show() | LED-Ring einschalten |
| clear() | LED-Ring 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 blau -> 0 — 255 Beispiel rot: int Farbe = LEDStreifen.Color(255, 0, 0); Beispiel grün: int Farbe = LEDStreifen.Color(0, 255, 0); Beispiel blau: int Farbe = LEDStreifen.Color(0, 0, 255); |
| fill(Farbe, Start, Ende) | Farbe für die mit Start und Ende bezeichneten Pixel setzen |
Beispiele:
Farbwechsel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include “Adafruit_NeoPixel.h” #define RING 7 // Anzahl der LEDs ⇒ muss angepasst werden #define AnzahlLED 32 // LEDRing -> Name des LED-Rings Adafruit_NeoPixel LEDRing(AnzahlLED, RING, NEO_GRB + NEO_KHZ800); void setup() { // setBrightness(0..255) LEDRing.setBrightness(200); // NeoPixel Bibliothek initialisieren LEDRing.begin(); } void loop() { // rot LEDRing.fill(LEDRing.Color(255, 0, 0), 0, AnzahlLED); LEDRing.show(); delay(1000); // grün LEDRing.fill(LEDRing.Color(0, 255, 0), 0, AnzahlLED); LEDRing.show(); delay(1000); // blau LEDRing.fill(LEDRing.Color(0, 0, 255), 0, AnzahlLED); LEDRing.show(); delay(1000); // gelb LEDRing.fill(LEDRing.Color(255, 255, 0), 0, AnzahlLED); LEDRing.show(); delay(1000); // pink LEDRing.fill(LEDRing.Color(255, 20, 147), 0, AnzahlLED); LEDRing.show(); delay(1000); LEDRing.clear(); LEDRing.show(); delay(2000); } |
Jagdeffekt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include “Adafruit_NeoPixel.h” int RING = 7; // Anzahl der LEDs -> muss angepasst werden int AnzahlLED = 32; // LED-Ring -> Name des LED-Rings Adafruit_NeoPixel LEDRing(AnzahlLED, RING, NEO_GRB + NEO_KHZ800); void setup() { // NeoPixel Bibliothek initialisieren LEDRing.begin(); // setBrightness(0..255) LEDRing.setBrightness(200); } void loop() { int WarteZeit = 100; for (int ii = 0; ii < 3; ii++) { for (int i = 0; i < LEDRing.numPixels(); i += 3) { // jede dritte LED einschalten // 0, 0, 255 -> blau RGB-Farbcode LEDRing.setPixelColor(i + ii, 0, 0, 255); } LEDRing.show(); delay(WarteZeit); for (int i = 0; i < LEDRing.numPixels(); i += 3) { // jede dritte LED ausschalten LEDRing.setPixelColor(i + ii, 0); } } } |
Ein Programmablauf kann nur unterbrochen werden, wenn jedem Taster ein Interrupt zugeordnet wird.

Das Programm
Variable und Bibliotheken
Definiere die Variablen und binde die benötigte Bibliothek ein. Beachte die Kommentare.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include “Adafruit_NeoPixel.h” #define RING 7 // Anzahl der LEDs -> muss angepasst werden #define AnzahlLED 32 // Variable für den gedrückten Taster volatile bool Links = false; volatile bool Rechts = false; // Minimum/Maximum für die Farbwerte festlegen #define Minimum 0 #define Maximum 255 // Leuchtdauer der LEDs #define Wartezeit 50 // LED-Ring -> Name des LED-Rings Adafruit_NeoPixel LEDRing(AnzahlLED, RING, NEO_GRB + NEO_KHZ800); // Taster definieren #define TASTERLINKS 2 #define TASTERRECHTS 3 |
Der setup-Teil
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | void setup() { // Zufallsgenerator starten randomSeed(analogRead(A0)); // NeoPixel Bibliothek initialisieren LEDRing.begin(); // setBrightness(0..255) LEDRing.setBrightness(200); LEDRing.clear(); LEDRing.show(); pinMode(TASTERLINKS, INPUT_PULLUP); pinMode(TASTERRECHTS, INPUT_PULLUP); // Funktion für das Auslösen des Interrupts definieren // Taster links attachInterrupt(digitalPinToInterrupt(TASTERLINKS), LEDSchaltenLinks, CHANGE); // Taster rechts attachInterrupt(digitalPinToInterrupt(TASTERRECHTS), LEDSchaltenRechts, CHANGE); } |
Der loop-Teil
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | void loop() { // linke Taste gedrückt if (Links) { // zufällige Farbwerte int ROT = ZufallsFarbe(); int GRUEN = ZufallsFarbe(); int BLAU = ZufallsFarbe(); /* feste Farbwerte: ROT: int ROT = 255; int GRUEN = 0; int BLAU = 0; —————- GRUEN int ROT = 0; int GRUEN = 255; int BLAU = 0; —————– BLAU int ROT = 0; int GRUEN = 0; int BLAU = 255; —————– GELB int ROT = 255; int GRUEN = 255; int BLAU = 0; */ // links drehen for (int LEDNummer = LEDRing.numPixels(); LEDNummer >= 0 ; LEDNummer–) { LEDRing.setPixelColor(LEDNummer, LEDRing.Color(ROT, GRUEN, BLAU)); LEDRing.show(); // Unterbrechung wenn der rechte Taster gedrückt wurde if (Rechts) break; delay(Wartezeit); } for (int LEDNummer = LEDRing.numPixels(); LEDNummer >= 0 ; LEDNummer–) { LEDRing.setPixelColor(LEDNummer, 0); LEDRing.show(); // Unterbrechung wenn der rechte Taster gedrückt wurde if (Rechts) break; delay(Wartezeit); } /* wenn der Streifen nach einem Durchlauf stoppen soll: // Links = false; */ Links = true; LEDRing.clear(); LEDRing.show(); } // rechte Taste gedrückt -> rechts drehen if (Rechts) { int ROT = ZufallsFarbe(); int BLAU = ZufallsFarbe(); int GRUEN = ZufallsFarbe(); for (int LEDNummer = 0; LEDNummer <= LEDRing.numPixels() ; LEDNummer++) { LEDRing.setPixelColor(LEDNummer, LEDRing.Color(ROT, BLAU, GRUEN)); LEDRing.show(); // Unterbrechung wenn der rechte Taster gedrückt wurde if (Links) break; delay(Wartezeit); } // LEDs ausschalten for (int LEDNummer = 0; LEDNummer <= LEDRing.numPixels() ; LEDNummer++) { LEDRing.setPixelColor(LEDNummer, 0); LEDRing.show(); // Unterbrechung wenn der linke Taster gedrückt wurde if (Links) break; delay(Wartezeit); } /* wenn der Ring nach einem Durchlauf stoppen soll: // Rechts = false; */ Rechts = true; LEDRing.clear(); LEDRing.show(); } } void LEDSchaltenRechts() { Rechts = true; Links = false; } void LEDSchaltenLinks() { Links = true; Rechts = false; } |
Verwendete Funktionen
Die Funktion ZufallsFarbe() ermittelt zufällige Farbwerte.
1 2 3 4 5 | int ZufallsFarbe() { int Farbe = random(0, 255); return Farbe; } |
Jetzt fehlen noch die Funktionen LEDSchaltenRechts() und LEDSchaltenLinks(). Sie tun nichts anderes als den Zustand der Taster mit true/false zu markieren.
1 2 3 4 5 6 7 8 9 10 11 | void LEDSchaltenRechts() { Rechts = true; Links = false; } void LEDSchaltenLinks() { Links = true; Rechts = false; } |
Verwandte Anleitungen:
Letzte Aktualisierung:






