#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 16
// 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;
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));
}
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);
}
}
}
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;
}
int ZufallsFarbe()
{
int Farbe = random(0, 255);
return Farbe;
}
Letzte Aktualisierung: