Kategorien: Zufallszahlen

Ziel des Projekts
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.
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.
Info
Beispiele:

Benötigte Bauteile
- ⇒NeoPixel-Ring 32 LEDs
- ⇒Taster
- Leitungsdrähte
- Lautsprecher (optional)
Der Schaltplan
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Warnung
Achte auf die Polung. Sie kann bei den NeoPixel-Ringen verschiedener Hersteller unterschiedlich sein.
Benötigte Bibliothek

| 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 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); } } } |
Das Programm
Info
Der Taster muss das laufende Programm mit ⇒attachInterrupt() unterbrechen.
Definiere die Variablen und binde die benötigte Bibliothek ein.
|
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:
|
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:
|
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 Funktionen:
- ZufallsFarbe() ermittelt zufällige Farbwerte.
- LEDSchalten() schaltet die LEDs
|
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 |
int ZufallsFarbe() { int Farbe = random(0, 255); return Farbe; } 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; } |
Ähnliche Projekte
- 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:

