LED Programmierbar Lauflicht

Das hatte ich übersehen, denn dann brauchen die Taster nicht entprellt zu werden, es muß nur die Flanke ausgewertet werden:

// https://forum.arduino.cc/t/led-programmierbar-lauflicht/917480/30?u=agmue
// LED Programmierbar Lauflicht
#include <FastLED.h>

// LED Stripes
const byte LEDs_Anzahl_1 = 20; // Anzahl von LEDs auf dem Stripe
const byte LEDs_Anzahl_2 = 20; // Anzahl von LEDs auf dem Stripe
const byte LEDs_Anzahl_3 = 20; // Anzahl von LEDs auf dem Stripe
const byte LEDs_Anzahl_4 = 20; // Anzahl von LEDs auf dem Stripe
const byte LEDs_Anzahl_5 = 20; // Anzahl von LEDs auf dem Stripe
const byte LEDs_Anzahl_6 = 20; // Anzahl von LEDs auf dem Stripe
const byte LEDs_Anzahl_7 = 20; // Anzahl von LEDs auf dem Stripe

// Taster
const byte Taster1 = 22; // Taster1 auf Pin22
const byte Taster2 = 23; // Taster2 auf Pin23
const byte Taster3 = 24; // Taster3 auf Pin24
const byte Taster4 = 25; // Taster4 auf Pin25
const byte Taster5 = 26; // Taster5 auf Pin26
const byte Taster6 = 27; // Taster6 auf Pin27
const byte Taster7 = 28; // Taster7 auf Pin28

bool akttaster1;  // aktueller Tasterzustand
bool akttaster2;
bool akttaster3;
bool akttaster4;
bool akttaster5;
bool akttaster6;
bool akttaster7;

bool alttaster1;  // alter Tasterzustand
bool alttaster2;
bool alttaster3;
bool alttaster4;
bool alttaster5;
bool alttaster6;
bool alttaster7;

// LED Stripes
const byte LED_Stripe1 = 30; // LED_Stripe1 auf Pin 30
const byte LED_Stripe2 = 31; // LED_Stripe2 auf Pin 31
const byte LED_Stripe3 = 32; // LED_Stripe3 auf Pin 32
const byte LED_Stripe4 = 33; // LED_Stripe4 auf Pin 33
const byte LED_Stripe5 = 34; // LED_Stripe5 auf Pin 34
const byte LED_Stripe6 = 35; // LED_Stripe6 auf Pin 35
const byte LED_Stripe7 = 36; // LED_Stripe7 auf Pin 36

CRGB leds1[LEDs_Anzahl_1];
CRGB leds2[LEDs_Anzahl_2];
CRGB leds3[LEDs_Anzahl_3];
CRGB leds4[LEDs_Anzahl_4];
CRGB leds5[LEDs_Anzahl_5];
CRGB leds6[LEDs_Anzahl_6];
CRGB leds7[LEDs_Anzahl_7];

byte schritt1;
byte schritt2;
byte schritt3;
byte schritt4;
byte schritt5;
byte schritt6;
byte schritt7;

byte lauflicht1;
byte lauflicht2;
byte lauflicht3;
byte lauflicht4;
byte lauflicht5;
byte lauflicht6;
byte lauflicht7;

const uint32_t Bew_Intervall1 = 100;
const uint32_t Bew_Intervall2 = 100;
const uint32_t Bew_Intervall3 = 100;
const uint32_t Bew_Intervall4 = 100;
const uint32_t Bew_Intervall5 = 100;
const uint32_t Bew_Intervall6 = 100;
const uint32_t Bew_Intervall7 = 100;

uint32_t bewegung1;
uint32_t bewegung2;
uint32_t bewegung3;
uint32_t bewegung4;
uint32_t bewegung5;
uint32_t bewegung6;
uint32_t bewegung7;

uint32_t dauer1;
uint32_t dauer2;
uint32_t dauer3;
uint32_t dauer4;
uint32_t dauer5;
uint32_t dauer6;
uint32_t dauer7;

const uint32_t Dauer_Int1 = 10000;  // 10 Sekunden Animation
const uint32_t Dauer_Int2 = 10000;
const uint32_t Dauer_Int3 = 10000;
const uint32_t Dauer_Int4 = 10000;
const uint32_t Dauer_Int5 = 10000;
const uint32_t Dauer_Int6 = 10000;
const uint32_t Dauer_Int7 = 10000;

void setup()
{
  //Zuweisung Taster auf Pins des Arduinos
  pinMode( Taster1, INPUT_PULLUP);
  pinMode( Taster2, INPUT_PULLUP);
  pinMode( Taster3, INPUT_PULLUP);
  pinMode( Taster4, INPUT_PULLUP);
  pinMode( Taster5, INPUT_PULLUP);
  pinMode( Taster6, INPUT_PULLUP);
  pinMode( Taster7, INPUT_PULLUP);

  alttaster1 = !digitalRead(Taster1);  // alten Tasterzustand aktualisieren
  alttaster2 = !digitalRead(Taster2);
  alttaster3 = !digitalRead(Taster3);
  alttaster4 = !digitalRead(Taster4);
  alttaster5 = !digitalRead(Taster5);
  alttaster6 = !digitalRead(Taster6);
  alttaster7 = !digitalRead(Taster7);

  FastLED.addLeds<WS2812B, LED_Stripe1 , GRB>(leds1, LEDs_Anzahl_1);
  FastLED.addLeds<WS2812B, LED_Stripe2 , GRB>(leds2, LEDs_Anzahl_2);
  FastLED.addLeds<WS2812B, LED_Stripe3 , GRB>(leds3, LEDs_Anzahl_3);
  FastLED.addLeds<WS2812B, LED_Stripe4 , GRB>(leds4, LEDs_Anzahl_4);
  FastLED.addLeds<WS2812B, LED_Stripe5 , GRB>(leds5, LEDs_Anzahl_5);
  FastLED.addLeds<WS2812B, LED_Stripe6 , GRB>(leds6, LEDs_Anzahl_6);
  FastLED.addLeds<WS2812B, LED_Stripe7 , GRB>(leds7, LEDs_Anzahl_7);

  FastLED.show();  // Anzeige löschen
}

void loop()
{
  uint32_t jetzt = millis();
  bool neu = false;

  alttaster1 = akttaster1;  // alten Tasterzustand aktualisieren
  alttaster2 = akttaster2;
  alttaster3 = akttaster3;
  alttaster4 = akttaster4;
  alttaster5 = akttaster5;
  alttaster6 = akttaster6;
  alttaster7 = akttaster7;

  akttaster1 = !digitalRead(Taster1);  // aktueller Tasterzustand
  akttaster2 = !digitalRead(Taster2);
  akttaster3 = !digitalRead(Taster3);
  akttaster4 = !digitalRead(Taster4);
  akttaster5 = !digitalRead(Taster5);
  akttaster6 = !digitalRead(Taster6);
  akttaster7 = !digitalRead(Taster7);

  // Streifen 1
  switch (schritt1)
  {
    case 0:
      if (akttaster1 && !alttaster1)
      {
        dauer1 = jetzt;
        schritt1++;
      }
      break;
    case 1:
      if (jetzt - bewegung1 >= Bew_Intervall1)
      {
        bewegung1 = jetzt;
        neu = true;
        leds1[lauflicht1] = CRGB::Black;
        leds1[LEDs_Anzahl_1 - lauflicht1 - 1] = CRGB::Black;
        if (jetzt - dauer1 >= Dauer_Int1)
        {
          lauflicht1 = 0;
          schritt1 = 0;
        } else {
          lauflicht1++;
          if (lauflicht1 >= LEDs_Anzahl_1) lauflicht1 = 0;
          leds1[lauflicht1] = CRGB::Green;
          leds1[LEDs_Anzahl_1 - lauflicht1 - 1] = CRGB::Red;
        }
      }
      break;
    default:
      schritt1 = 0;
  }

  // Streifen 2
  switch (schritt2)
  {
    case 0:
      if (akttaster2 && !alttaster2)
      {
        dauer2 = jetzt;
        schritt2++;
      }
      break;
    case 1:
      if (jetzt - bewegung2 >= Bew_Intervall2)
      {
        bewegung2 = jetzt;
        neu = true;
        leds2[lauflicht2] = CRGB::Black;
        leds2[LEDs_Anzahl_2 - lauflicht2 - 1] = CRGB::Black;
        if (jetzt - dauer2 >= Dauer_Int2)
        {
          lauflicht2 = 0;
          schritt2 = 0;
        } else {
          lauflicht2++;
          if (lauflicht2 >= LEDs_Anzahl_2) lauflicht2 = 0;
          leds2[lauflicht2] = CRGB::Green;
          leds2[LEDs_Anzahl_2 - lauflicht2 - 1] = CRGB::Red;
        }
      }
      break;
    default:
      schritt2 = 0;
  }

  if (neu) FastLED.show();
}

Zum Testen habe ich auch mal einen zweiten Streifen drangehängt, damit die sich nicht gegenseitig beeinflussen.