...Kompilerdirektiven
Habe ich die benutzt?

Du hast vollkommen Recht - werde ich auch machen, brauche aber noch allgemeingültige/universelle Vereinbarungen für mich selber.
Z.B. bin ich mir nicht sicher, ob die Entprellzeit im den Globalvariablen-Bereich
HTML-Code:
const int EntprellZeit = 30;   // [ms], Entprellzeit (typ.Prellzeit 0,1-30ms)
oder besser (kontrollierter, leserlicher) in der Funktion Entprell() aufgehoben ist
HTML-Code:
static int EntprellZeit = 30;   // [ms], Entprellzeit (typ.Prellzeit 0,1-30ms)
Mit meinem derzeitigen code bin ich schon sehr zufrieden - gibt 3 Zustände zurück - 0..LOW, 1...HIGH, 2...in Entprellung
HTML-Code:
//==========MAIN==========//
void loop() {
  static int AusgImpuls = 0;                // Ausg-AusgImpuls [ms]
  AusgTakt(AusgImpuls, 1000);               // Taktdauer [ms], Intervall [ms]
  
  static int TasteLiZustand = 0;            // akt. Zustand 0/1 der Taste

  if(Entprell(TasteLiPin) == 1) {           // sobald Taste HIGH und entprellt
    AusgImpuls = 900;                       // Ausg-AusgImpuls bei Taste HIGH
    TasteLiZustand = 1;                     // speichert das Taste "1" ist
  }
  else if(Entprell(TasteLiPin) == 0) {      // sobald Taste LOW und entprellt
    AusgImpuls = 10;                        // Ausg-AusgImpuls bei Taste LOW
    TasteLiZustand = 0;                     // speichert das Taste LOW ist
  }
  else
    TZ("Medlung: Kontakt derzeit in Entprellung");
}

//----------STANDARD-FUNKTIONEN----------//
//Kontaktentprellung durchführen, Zustand zurück geben
//Rückgabe 3 Zustände; "0"...LOW+Kontakt entprellt / "1"...HIGH+Kontakt entprellt / "2"...Zustand unbekannt, in Entprellung 
int Entprell(int Pin) { 
  static int KontaktStatusNeu = 0;              // akt.Zustand
  static int KontaktStatusAlt = 0;              // vorheriger Zustand
  static unsigned long KontaktStartZeit = 0;    // Startzeit der ersten Kontaktzustandsänderung

  KontaktStatusNeu = digitalRead(Pin);          // speichert akt. Kontaktzustand
  if(KontaktStatusNeu != KontaktStatusAlt) {    // wenn sich Kontaktzustand ändert
    KontaktStartZeit = millis();                // speichert aktualisierte Startzeit
    KontaktStatusAlt = KontaktStatusNeu;        // geänderter Zustand gespeichert
  }
  if(KontaktStatusNeu == 0 && (millis() >= KontaktStartZeit + EntprellZeit)) // wenn Entprellzeit überschritten und Kontakt LOW
    return 0;                                   // "0" zuück, Kontakt LOW und entprellt
  else
    if(KontaktStatusNeu == 1 && (millis() >= KontaktStartZeit + EntprellZeit)) // wenn Entprellzeit überschritten und Kontakt HIGH
      return 1;                                 // "1" zurück, Kontakt HIGH und entprellt
  else
    return 2;                                   // "2" zurück, noch nicht entpellt, Kontaktzustand unbekannt
}
Fehlt nur noch, dass mehrer Taster/Kontakt gleichzeitig entprellt werden können.
Danach werde ich die Zustands- und Entprellgeschichte in eine Bibliothek (*.h, *.cpp) einrichten.

- - - Aktualisiert - - -

...ETWAS SPÄTER:

Habe derzeit das Problem, dass innerhalb einer Entprellphase, keine andere Entprellung erfolge kann.
Solang eine Entprellung läuft, werden alle anderen Kontakte/Tasten "verschluckt".
Ursache ist, dass die Funktion Entprellung() eine Startzeit speichert und diese berechnet.

Können diese 30ms-Überlappungen in der Praxis vernachlässigt werden?
Oder sollte/muss ich für jede Taste/Kontakt eine eigene Funktion vorhalten, in der die Entprell-Startzeit gespeichert wird?