# define ROT 3 # define TASTER 2 volatile int tasterStatus = LOW; // aktuelles Signal vom Eingangspin volatile int tasterGedrueckt = 0; // abfragen ob Taster gedrückt war volatile int lichtmodus = 0; // festlegen der verschiedenen Lichtprogramme volatile int ledStatus = LOW; // aktueller Zusatnd der LED volatile int entprellZeit = 1000000; // Zeit für Entprellung, anpassen! unsigned long tasterZeit = 0; // Zeit beim drücken des Tasters unsigned long ledMillis = 0; // Zeit für den Blinkrythmus der LED volatile bool TasterStatus = LOW; void setup() { pinMode(ROT, OUTPUT); pinMode(LED_BUILTIN, OUTPUT); pinMode(TASTER, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(TASTER), LEDSchalten, FALLING); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); } void LEDSchalten() { // Lesen des tasterPin tasterStatus = digitalRead(TASTER); // Wenn der Taster gedrückt ist... if (tasterStatus == HIGH) { tasterZeit = micros(); // aktualisiere tasterZeit tasterGedrueckt = 1; // speichert, dass Taster gedrückt wurde } // Wenn die gewählte entprellZeit vergangen ist und der Taster gedrückt war... if ((micros() - tasterZeit > entprellZeit) && tasterGedrueckt == 1) { lichtmodus++; // lichtmodus wird um +1 erhöht tasterGedrueckt = 0; // setzt gedrückten Taster zurück } TasterStatus = !TasterStatus; digitalWrite(ROT, TasterStatus); }