
Der NeoPixel-Ring soll als Glücksrad funktionieren. Wird der Taster gedrückt, beginnt das Glücksrad zu laufen, ein erneuter Tasterdruck stoppt das Glücksrad.
So sieht es aus:

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.
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 19.02.23)
Beispiele:

Benötigte Bauteile:
- NeoPixel-Ring 32 LEDs
- Taster
- Leitungsdrähte
- Lautsprecher (optional)
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 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 |
Probiere die folgenden 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 49 50 51 52 53 54 55 56 57 58 59 | #include “Adafruit_NeoPixel.h” #define RING 7 // Anzahl der LEDs ⇒ muss angepasst werden #define AnzahlLED 32 // LEDRing -> Name des LED-Rings Adafruit_NeoPixel LEDRing = Adafruit_NeoPixel(AnzahlLED, RING, NEO_GRB + NEO_KHZ800); void setup() { // setBrightness(0..255) LEDRing.setBrightness(200); // NeoPixel Bibliothek initialisieren LEDRing.begin(); } void loop() { // Variable für die Farbe festlegen int Farbe; // rot Farbe = LEDRing.Color(255, 0, 0); LEDRing.fill(Farbe, 0, AnzahlLED); LEDRing.show(); delay(1000); // grün Farbe = LEDRing.Color(0, 255, 0); LEDRing.fill(Farbe, 0, AnzahlLED); LEDRing.show(); delay(1000); // blau Farbe = LEDRing.Color(0, 0, 255); LEDRing.fill(Farbe, 0, AnzahlLED); LEDRing.show(); delay(1000); // gelb Farbe = LEDRing.Color(255, 255, 0); LEDRing.fill(Farbe, 0, AnzahlLED); LEDRing.show(); delay(1000); // pink Farbe = LEDRing.Color(255, 20, 147); LEDRing.fill(Farbe, 0, AnzahlLED); LEDRing.show(); delay(1000); // Pause 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” #define RING 7 // Anzahl der LEDs ⇒ muss angepasst werden #define AnzahlLED 32 // LED-Ring -> Name des LED-Rings Adafruit_NeoPixel LEDRing = Adafruit_NeoPixel(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); } } } |
Der Taster muss das laufende Programm mit ⇒attachInterrupt() unterbrechen.
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 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include “Adafruit_NeoPixel.h” // digitaler Pin LED-Ring #define RING 7 // Pin des Lautsprechers #define LAUTSPRECHER 8 // Anzahl der LEDs -> muss an den verwendeten Neopixel-Ring angepasst werden #define AnzahlLED 32 // LED-Ring -> Name des LED-Rings Adafruit_NeoPixel LEDRing = Adafruit_NeoPixel(AnzahlLED, RING, NEO_GRB + NEO_KHZ800); // Status entscheidet, ob das Glücksrad läuft oder gestoppt wird // false -> Glücksrad läuft beim Start volatile bool Status = false; // true -> Lautsprecher ein // false -> Lautsprecher aus bool Toene = true; // true -> zufällige Farbe nach jeder Runde wechseln // false -> Farbwechsel nach jedem Pixel bool FarbWechselRunde = false; // Definition der Farben int ROT, GRUEN, BLAU; // Taster am Interrupt-Pin definieren #define TASTER 3 // Variablen für die mit millis() ermittelte Zeit // damit nur jeweils ein Tasterdruck erkannt wird static unsigned long GesicherteStartZeit = 0; unsigned long Startzeit; // Zeit zwischen den Bewegungen der LED int WarteZeit = 50; |
Der setup-Teil. Beachte die Kommentare.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | void setup() { // NeoPixel Bibliothek initialisieren LEDRing.begin(); // setBrightness(0..255) LEDRing.setBrightness(250); // Eingangspegel auf HIGH setzen pinMode(TASTER, INPUT_PULLUP); // Interrupt dem Taster zuordnen und die Funktion LEDSchalten aufrufen attachInterrupt(digitalPinToInterrupt(TASTER), LEDSchalten, FALLING); // Zufallsgenerator starten randomSeed(analogRead(A0)); } |
Der loop-Teil. 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 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 | void loop() { // LED-Ring ausschalten LEDRing.clear(); // zufällige Farbwerte Wechsel nach jeder 360° Drehung // -> FarbWechselRunde true if (FarbWechselRunde) { ROT = ZufallsFarbe(); GRUEN = ZufallsFarbe(); BLAU = ZufallsFarbe(); } // wenn Status false -> Glücksrad läuft if (!Status) { if (Toene) tone(LAUTSPRECHER, 1000, 5); // Start der Drehung mit LED 0 // Ende mit Anzahl der LEDs for (int i = 0; i < LEDRing.numPixels(); i++) { // zufällige Farbwerte: Wechsel nach jeder LED // -> FarbWechselRunde false if (!FarbWechselRunde) { ROT = ZufallsFarbe(); GRUEN = ZufallsFarbe(); BLAU = ZufallsFarbe(); } // Farbe für die aktuelle LED LEDRing.setPixelColor(i, ROT, GRUEN, BLAU); // LEDs einschalten LEDRing.show(); /* Taster gedrückt: Status = true -> Glücksrad stoppen break -> for-Schleife verlassen */ if (Status) { if (Toene) tone(LAUTSPRECHER, 1000, 500); break; } // Wartezeit bis zur nächsten LED delay(WarteZeit); // aktuell eingeschaltete LEDs ausschalten LEDRing.setPixelColor(i, 0); } } } |
Die Funktion ZufallsFarbe() ermittelt zufällige Farbwerte.
1 2 3 4 5 | int ZufallsFarbe() { int Farbe = random(0, 255); return Farbe; } |
Jetzt fehlt noch die ⇒Funktion LEDSchalten().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | void LEDSchalten() { // aktuelle Zeit sichern Startzeit = millis(); /* bei mehr als 250 Millisekunden Differenz zwischen der aktuellen und der gesicherten Zeit -> Status umdrehen aus false wird true -> Glücksrad stoppen aus true wird false -> Glücksrad starten */ if (Startzeit - GesicherteStartZeit > 250) { Status = !Status; } GesicherteStartZeit = Startzeit; } |
Verwandte Anleitungen:
Letzte Aktualisierung:






