#define TASTER_PIN 6
#include <TimerOne.h>
// Globale Variablen
volatile bool timerExpired = false; // Flag: Timer beendet die Entprellzeit
volatile bool buttonProcessed = false; // Flag: Taster wurde gedrückt und verarbeitet
void setup() {
Serial.begin(9600);
pinMode(TASTER_PIN, INPUT_PULLUP); // Taster mit Pullup-Widerstand aktivieren
attachInterrupt(digitalPinToInterrupt(TASTER_PIN), startTimerISR, FALLING); // Taster-Interrupt
Timer1.initialize(20000); // Timer für 20 ms Entprellzeit initialisieren
Timer1.attachInterrupt(timerISR); // Timer-Interrupt mit ISR verbinden
Timer1.stop(); // Timer standardmäßig stoppen
}
void startTimerISR() {
// Nur Timer starten, wenn er nicht bereits läuft
if (!buttonProcessed) {
buttonProcessed = true; // Markiere den Tasterdruck als verarbeitet
Timer1.start(); // Timer starten, um Entprellzeit zu messen
}
}
void timerISR() {
timerExpired = true; // Entprellzeit abgelaufen: Timer beendet Entprellung
Timer1.stop(); // Timer stoppen, um Ressourcen zu sparen
}
void loop() {
static int counter = 0; // Druckzähler
if (timerExpired) { // Timer-Interrupt hat Entprellzeit beendet
counter++; // Zähler erhöhen
Serial.println(counter); // Zähler ausgeben
timerExpired = false; // Timer-Flag zurücksetzen
buttonProcessed = false; // Taster kann erneut verarbeitet werden
}
}