// Array mit 5 Elementen und den zugehörigen Pins
byte LED[5] = {3, 4, 5, 6, 7};
// Anzahl der LEDs feststellen
byte LEDMax = sizeof(LED);
// Interruptpin
#define EncoderPinA 2
#define EncoderPinB 8
// Leuchtdauer beim Start: 100 Millisekunden
volatile unsigned int Leuchtdauer = 100;
// Sprung in Schritten, wenn eine Bewegung erkannt wird
int SprungSchritte = 10;
void setup()
{
Serial.begin(9600);
for (int i = 0; i < LEDMax; i++)
{
pinMode(LED[i], OUTPUT);
}
pinMode(EncoderPinA, INPUT_PULLUP);
pinMode(EncoderPinB, INPUT_PULLUP);
// Interrupt-Pin EncoderPinA zuordnen
attachInterrupt(digitalPinToInterrupt(EncoderPinA), DrehgeberLesen, CHANGE);
}
void loop()
{
// Lauflicht starten
for (int i = 0; i < LEDMax; i++)
{
Lauflicht();
}
}
void DrehgeberLesen()
{
/*
wenn beide Drehgeber-Pins gleich sind -> Bewegung vorwärts
sind sie unterschiedlich -> Bewegung rückwärts.
Drehung nach links -> Leuchtdauer vergrößern
Drehung nach rechts -> Leuchtdauer verkleinern
*/
if (digitalRead(EncoderPinA) == digitalRead(EncoderPinB))
{
Leuchtdauer += SprungSchritte;
}
else Leuchtdauer -= SprungSchritte;
if (Leuchtdauer < 100) Leuchtdauer = 100;
}
void Lauflicht()
{
for (int i = 0; i < LEDMax; i++)
{
// aktuelle LED i einschalten
digitalWrite(LED[i], HIGH);
delay(Leuchtdauer);
digitalWrite(LED[i], LOW);
}
}
Letzte Aktualisierung: