const int buttonPin = 2; // Pin, an dem der Taster angeschlossen ist
const int ledPin = 13; // Pin, an dem die LED angeschlossen ist
unsigned long buttonPressTime = 0; // Zeitpunkt des Tastendrucks
int ledState = LOW; // Aktueller Zustand der LED (an oder aus)
int buttonState = LOW; // Aktueller Zustand des Tasters
int lastButtonState = LOW; // Vorheriger Zustand des Tasters
unsigned long lastDebounceTime = 0; // Zeitpunkt des letzten Entprellens
unsigned long debounceDelay = 50; // Entprellzeit in Millisekunden
int shortPressDuration = 500; // Dauer für kurzen Tastendruck in Millisekunden
int mediumPressMinDuration = 1000; // Mindestdauer für mittleren Tastendruck in Millisekunden
int longPressDuration = 1500; // Mindestdauer für langen Tastendruck in Millisekunden
bool ledBlinking = false; // Gibt an, ob die LED blinkt
unsigned long lastBlinkTime = 0; // Zeitpunkt des letzten Blinkens
unsigned long blinkInterval = 800; // Blinkintervall in Millisekunden
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Taster als Eingang mit Pull-up-Widerstand
pinMode(ledPin, OUTPUT); // LED als Ausgang
digitalWrite(ledPin, LOW); // LED im Ruhezustand ausschalten
}
void loop() {
int reading = digitalRead(buttonPin); // Tasterzustand lesen
// Entprellen
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if (millis() - lastDebounceTime > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
// Wenn der Taster gedrückt wird, wird der Zeitpunkt des Drucks gespeichert
if (buttonState == LOW) {
buttonPressTime = millis();
if (millis() - buttonPressTime < shortPressDuration) {
// Kurzer Tastendruck (kleiner als 0,5 Sekunden)
ledState = HIGH;
digitalWrite(ledPin, ledState);
delay(200); // LED kurz einschalten
ledState = LOW;
digitalWrite(ledPin, ledState);
delay(200);
ledState = HIGH;
digitalWrite(ledPin, ledState);
delay(200);
ledState = LOW;
digitalWrite(ledPin, ledState);
delay(200);
ledState = LOW;
digitalWrite(ledPin, ledState); // LED ausschalten
} else if (millis() - buttonPressTime >= shortPressDuration &&
millis() - buttonPressTime <= longPressDuration) {
// Mittlerer Tastendruck (zwischen 0,5 Sekunden und 1,5 Sekunden)
int blinkCount = 40;
ledBlinking = true;
for (int i = 0; i < blinkCount; i++) {
if (millis() - lastBlinkTime >= blinkInterval) {
lastBlinkTime = millis();
ledState = !ledState;
digitalWrite(ledPin, ledState);
}
delay(10); // Kleine Pause zwischen den Blinkzyklen
}
ledState = LOW;
digitalWrite(ledPin, ledState); // LED ausschalten
ledBlinking = false;
} else {
// Langer Tastendruck (länger als 1,5 Sekunden)
ledBlinking = true;
ledState = HIGH;
digitalWrite(ledPin, ledState);
}
} else {
// Taster losgelassen
if (ledBlinking) {
ledBlinking = false;
ledState = LOW;
digitalWrite(ledPin, ledState); // LED ausschalten
}
}
}
}
lastButtonState = reading;
}