#define TASTERPIN 3
#define LED_PIN 6
volatile bool buttonpressed = false; // Flag, wenn der Taster gedrückt wird
unsigned long lastInterruptTime = 0; // Zeit des letzten Interrupts
unsigned long debounceDelay = 50; // Entprellungszeit (in Millisekunden)
void setup() {
Serial.begin(9600);
pinMode(TASTERPIN, INPUT_PULLUP); // Taster an Pin 3
pinMode(LED_PIN, OUTPUT); // LED an Pin 6
attachInterrupt(digitalPinToInterrupt(TASTERPIN), buttonpressedISR, FALLING); // Interrupt für Taster
}
void blinkLED(int blinks) {
for (int i = 0; i < blinks; i++) {
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}
}
void buttonpressedISR() {
// Setze Flag, wenn der Taster gedrückt wird
buttonpressed = true;
}
void loop() {
static int zaehlwert = 0;
static int vorherigerZaehlwert = 0;
// Überprüfe, ob der Taster gedrückt wurde und es genügend Zeit für die Entprellung gab
if (buttonpressed) {
// Wenn 50ms seit dem letzten Interrupt vergangen sind
if (millis() - lastInterruptTime > debounceDelay) {
zaehlwert++; // Zähler erhöhen
Serial.println("Zählwert: " + String(zaehlwert));
lastInterruptTime = millis(); // Update der Zeit des letzten Interrupts
}
buttonpressed = false; // Setze das Flag zurück
}
// Blinkt nur nach Zählwert-Erhöhung
if (zaehlwert > vorherigerZaehlwert) {
blinkLED(zaehlwert);
vorherigerZaehlwert = zaehlwert; // Zähler aktualisieren
}
}