# include "Adafruit_NeoPixel.h"
# define RING 7
// Anzahl der LEDs -> muss angepasst werden
# define AnzahlLED 32
// Variable für den gedrückten Taster
volatile bool Links = false;
volatile bool Rechts = false;
// Minimum/Maximum für die Farbwerte festlegen
# define Minimum 0
# define Maximum 255
// Leuchtdauer der LEDs
# define Wartezeit 50
// LED-Ring -> Name des LED-Rings
Adafruit_NeoPixel LEDRing = Adafruit_NeoPixel(AnzahlLED, RING, NEO_GRB + NEO_KHZ800);
// Taster definieren
# define TASTERLINKS 2
# define TASTERRECHTS 3
void setup()
{
// Zufallsgenerator starten
randomSeed(analogRead(A0));
// NeoPixel Bibliothek initialisieren
LEDRing.begin();
// setBrightness(0..255)
LEDRing.setBrightness(200);
LEDRing.clear();
LEDRing.show();
pinMode(TASTERLINKS, INPUT_PULLUP);
pinMode(TASTERRECHTS, INPUT_PULLUP);
// Funktion für das Auslösen des Interrupts definieren
// Taster links
attachInterrupt(digitalPinToInterrupt(TASTERLINKS), LEDSchaltenLinks, CHANGE);
// Taster rechts
attachInterrupt(digitalPinToInterrupt(TASTERRECHTS), LEDSchaltenRechts, CHANGE);
}
void loop()
{
// linke Taste gedrückt
if (Links)
{
// zufällige Farbwerte
int ROT = ZufallsFarbe();
int GRUEN = ZufallsFarbe();
int BLAU = ZufallsFarbe();
/*
feste Farbwerte:
ROT:
int ROT = 255;
int GRUEN = 0;
int BLAU = 0;
----------------
GRUEN
int ROT = 0;
int GRUEN = 255;
int BLAU = 0;
-----------------
BLAU
int ROT = 0;
int GRUEN = 0;
int BLAU = 255;
-----------------
GELB
int ROT = 255;
int GRUEN = 255;
int BLAU = 0;
*/
for (int LEDNummer = 0; LEDNummer <= LEDRing.numPixels() ; LEDNummer++)
{
LEDRing.setPixelColor(LEDNummer, LEDRing.Color(ROT, GRUEN, BLAU));
LEDRing.show();
// Unterbrechung wenn der rechte Taster gedrückt wurde
if (Rechts) break;
delay(Wartezeit);
}
// zurück LEDs ausschalten
for (int LEDNummer = LEDRing.numPixels(); LEDNummer >= 0 ; LEDNummer--)
{
LEDRing.setPixelColor(LEDNummer, 0);
LEDRing.show();
// Unterbrechung wenn der rechte Taster gedrückt wurde
if (Rechts) break;
delay(Wartezeit);
}
/*
wenn der Streifen nach einem Durchlauf nicht stoppen soll:
// Links = false;
*/
Links = false;
LEDRing.clear();
LEDRing.show();
}
// rechte Taste gedrückt
if (Rechts)
{
int ROT = ZufallsFarbe();
int BLAU = ZufallsFarbe();
int GRUEN = ZufallsFarbe();
for (int LEDNummer = LEDRing.numPixels(); LEDNummer >= 0 ; LEDNummer--)
{
LEDRing.setPixelColor(LEDNummer, LEDRing.Color(ROT, BLAU, GRUEN));
LEDRing.show();
// Unterbrechung wenn der rechte Taster gedrückt wurde
if (Links) break;
delay(Wartezeit);
}
// LEDs ausschalten
for (int LEDNummer = LEDRing.numPixels(); LEDNummer >= 0 ; LEDNummer--)
{
LEDRing.setPixelColor(LEDNummer, 0);
LEDRing.show();
// Unterbrechung wenn der linke Taster gedrückt wurde
if (Links) break;
delay(Wartezeit);
}
/*
wenn der Ring nach einem Durchlauf nicht stoppen soll:
// Rechts = false;
*/
Rechts = false;
LEDRing.clear();
LEDRing.show();
}
}
void LEDSchaltenRechts()
{
Rechts = true;
Links = false;
}
void LEDSchaltenLinks()
{
Links = true;
Rechts = false;
}
int ZufallsFarbe()
{
int Farbe = random(0, 255);
return Farbe;
}
Letzte Aktualisierung: