/*
Titel: Led dimmen / Übung für Test
Author: Gregor Mausser
Date: 14.1.2026
*/
const int LedPin = 3;
const int ButtonPin = 5;
int mode = 0;
int LedValue = 0;
// Für Flankenerkennung
bool lastButtonState = HIGH;
// ---------- DIMM-FUNKTIONEN ----------
// 0 → maxValue
void dimUp1(int maxValue) {
for (int i = 0; i <= maxValue; i++) {
analogWrite(LedPin, i);
LedValue = i;
Serial.println(i);
delay(10);
}
}
// start → end
void dimUpR(int start, int end) {
for (int i = start; i <= end; i++) {
analogWrite(LedPin, i);
LedValue = i;
delay(10);
}
}
// maxValue → minValue
void dimDown(int maxValue, int minValue) {
for (int i = maxValue; i >= minValue; i--) {
analogWrite(LedPin, i);
LedValue = i;
Serial.println(i);
delay(10);
}
}
// ---------- SETUP ----------
void setup() {
Serial.begin(9600);
pinMode(LedPin, OUTPUT);
pinMode(ButtonPin, INPUT_PULLUP);
}
// ---------- LOOP MIT FLANKENERKENNUNG ----------
void loop() {
int state = digitalRead(ButtonPin);
bool reading = digitalRead(ButtonPin);
// Flankenerkennung: nur reagieren, wenn Taste neu gedrückt wird
if (reading == LOW && lastButtonState == HIGH) {
mode++;
Serial.print("Tastendruck erkannt, Counter = ");
Serial.println(mode);
switch (mode) {
// 0% → 100%
case 1:
dimUp1(255);
break;
// 100% → 50%
case 2:
dimDown(255, 127);
break;
// 50% → 0%
case 3:
dimDown(127, 0);
break;
// 50% → 80%
case 4:
dimUpR(127, 200);
break;
// 80% → 0%
case 5:
dimDown(200, 0);
break;
// LED aus + Reset
default:
analogWrite(LedPin, 0);
Serial.println("Led ist OFF");
mode = 0;
break;
}
}
// Zustand merken für nächste Flanke
lastButtonState = reading;
// ---------- SERIAL PLOTTER ----------
Serial.print(mode);
Serial.print(" ");
Serial.print(LedValue);
Serial.print(" ");
Serial.println(digitalRead(ButtonPin));
}