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 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | #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; 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: