/*
Titel: Taschenlampe mit LED Fading
Author: Gregor Mausser
Date: 14.01.2026
*/
//define Pins
#define LedPin 3
int ButtonPin=5;
//define constant delay
#define timeconst 20
//define buttoncounter
int buttoncount=0;
//define Zeit zwischen den Dimmvorgängen beim 3. drücken
#define delay3 5000
//define Zeit zwischen den Dimmvorgängen beim 4. drücken
#define delay4 3000
//gegen Tastenprellen (mit millis)
bool lastReading = HIGH;
bool stableState = HIGH;
unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 30;
//Variablen für die Messung der Tastendrucksdauer
unsigned long startDuration = 0;
unsigned long durationButton = 0;
void setup() {
// Ausgänge bestimmen
pinMode(LedPin, OUTPUT);
pinMode(ButtonPin, INPUT_PULLUP);
Serial.begin(9600);
}
//Funktionen
//Led hoch dimmen
void dimUp(int maxValue) {
for (int i = 0; i <= maxValue; i++) {
analogWrite(LedPin, i);
Serial.println(i);
delay(timeconst);
}
}
//Led runter dimmen
void dimDown(int maxValue, int minValue) {
for (int i = maxValue; i >= minValue; i--) {
analogWrite(LedPin, i);
Serial.println(i);
delay(timeconst);
}
}
void loop() {
bool reading = digitalRead(ButtonPin);
if (reading != lastReading) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != stableState) {
stableState = reading;
//Zeitmessung starten
if (stableState == LOW) {
startDuration = millis();
}
//Zeitmessung beenden
if (stableState == HIGH) {
durationButton = millis() - startDuration;
}
}
}
// Den aktuellen rohen Wert als "letztes Lesen" merken
lastReading = reading;
//Wird ausgeführt wenn der Button länger als 2 sec gedrückt wird
if (durationButton >= 2000) {
analogWrite(LedPin, 0);
delay(250);
analogWrite(LedPin, 255);
delay(250);
analogWrite(LedPin, 0);
delay(250);
analogWrite(LedPin, 255);
delay(250);
analogWrite(LedPin, 0);
Serial.println("Taschenlampe/Led = OFF");
}
//Wenn der Button nicht länger als 2 sec gedrückt wurde
if(buttoncount > 1 && buttoncount < 2000) {
buttoncount++;
Serial.println(buttoncount);
switch(buttoncount) {
//Taschenlampe ON(100%) beim 1. drücke
case 1:
dimUp(255);
break;
//Taschenlampe auf 50% dimmen beim 2. drücken
case 2:
dimDown(255, 127);
break;
//Taschenlampe von 0% - 30% - warten - 30% - 0% bei 3. drücken
case 3:
analogWrite(LedPin, 0);
delay(500);
dimUp(77);
delay(delay3);
dimDown(77, 0);
break;
//Taschenlampe von 0% - 100% - warten - 100% - 0% bei 4. drücken
case 4:
analogWrite(LedPin, 0);
dimUp(255);
delay(delay4);
dimDown(255, 0);
break;
//Taschenlampe OFF(0%) beim 5. drücken
case 5:
analogWrite(LedPin, 0);
buttoncount=0;
Serial.println(buttoncount);
Serial.println("Taschenlampe/Led = OFF");
break;
default:
analogWrite(LedPin, 0);
buttoncount=0;
Serial.println(buttoncount);
Serial.println("Es ist ein Fehler aufgetreten!");
Serial.println("Taschenlampe/Led = OFF");
break;
}
}
}