#include #include #include const byte b4 = 2; //Button 4 ButtonKing button4(b4, true); int ticks = 0; void setup() { Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(13, LOW); pinMode(b4, INPUT); } void loop() { button4.isClick(); } void doubleclick4() { enter_sleep(); //Serial.println("Button 4 doubleclick."); } void enter_sleep(void) { /* display.setSegments(OFF); tone(speakerPin, 2000, 1000); delay(1000); noTone(speakerPin); */ attachInterrupt(digitalPinToInterrupt(b4), PINisr, FALLING); /* Arduino schlafen legen */ set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); sleep_mode(); sleep_disable(); // nach dem wecken if (ticks == 5) { //5*125ms Watchdog Ticks wdt_disable(); ticks=0; beep(); } } void beep(void) { Serial.println("test"); } void PINisr(void) { // ISR fuer Pin 2 // detach Interrupt, damit er nur einmal auftritt detachInterrupt(digitalPinToInterrupt(b4)); wdt_start(); } ISR(WDT_vect) { if (!digitalRead(b4)) ticks++; else { ticks = 0; wdt_disable(); } } void wdt_start(void) { cli(); wdt_reset(); WDTCSR |= (1 << WDCE) | (1 << WDE); WDTCSR = (1 << WDIE) | (0 << WDE) | (1 << WDP1) | (1 << WDP0); // 125ms Interrupt sei(); }