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
#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":
#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 = 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.
#include "Adafruit_NeoPixel.h"
// digitaler Pin LED-Ring
#define RING 7
// digitaler 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.
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.
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.
int ZufallsFarbe()
{
int Farbe = random(0, 255);
return Farbe;
}
Jetzt fehlt noch die ⇒Funktion LEDSchalten().
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:
- Interrupt: Lauflicht
- Interrupt - Lauflicht mit Drehgeber
- Interrupt: Licht ein- und ausschalten
- Interrupt: Licht schalten mit Bewegungsmelder
- Interrupt: Morsegerät
- Interrupt: Farbenspiel mit einem NeoPixel-Ring
- Interrupt: Lauflicht mit Fernbedienung
Letzte Aktualisierung: