Jou, meine Lösung sieht folgend aus - DAS verstehe ich auch...

HTML-Code:
void loop() {
  AusgSekTakt(); // Sek.Takt-Anzeige

  static unsigned long TasteGedrueckt = 0; 
  static int TasteLiZustand = 0; 

  if(Entprell(TasteLiPin) == 1) {
    if(TasteLiZustand == 0) { 
      TasteLiZustand = 1;  
      TasteGedrueckt = millis();
    }
  TZ3("Taste gedrueckt+entprellt seit ", millis() - TasteGedrueckt, " ms"); 
  }
  else TasteLiZustand = 0;
}

//Tastenentprellung
int Entprell(int pin){
  static int TastenStatusNeu = 0; 
  static int TastenStatusAlt = 0;
  static unsigned long TastStartZeit = 0;
  
  TastenStatusNeu = digitalRead(pin);
  if(TastenStatusNeu != TastenStatusAlt) {
    TastenStatusAlt = TastenStatusNeu;
    if(TastenStatusNeu == 1) { 
      TastStartZeit = millis();
    }
  }
  if((millis() >= TastStartZeit + EntprellZeit) && TastenStatusNeu == 1)
    return 1;
  else
    return 0;
}
Frage:
1. Hat es irgend welche Vor/Nachteile, ob "TasteGedrueckt", "TasteLiZustand " als static- oder global-Variable deklariert werden? Ohne static funktioniert der loop nicht.
2. Seht ihr irgend wo einen Fehler oder code-Unsauberkeiten?


Meine nächsten Baustellen;
Schritt 01: Rückgabe von 5 Zustands-Peaks; 0=LOW, 1= HIGH, 2=Flanke steigend, 3=Flanke fallend, 5=unbekannt
Schritt 02: Beliebig viele Tasten/Schalteingänge, teils zeitgleich innerhalb von [ms], entprellen.