Lauf­licht mit Drehgeber

// 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: 1. Aug 2023 @ 8:41