#include <avr/sleep.h>
const byte btnPin = 2;
const byte ledPin = 4;
bool ledStatus = false;
unsigned long ledTimeShot = 0;
unsigned long sleepTimeShot = 0;
unsigned long ledInterval = 1000;
unsigned long sleepInterval = 4000;
void setup() {
pinMode(btnPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
unsigned long currentTime = millis();
int btnStatus = digitalRead(btnPin);
if (btnStatus == 0) {
Serial.println(btnStatus);
}
if (currentTime - ledTimeShot >= ledInterval) {
ledTimeShot = currentTime;
ledStatus = !ledStatus;
digitalWrite(ledPin, ledStatus);
Serial.println("Bla " + String(ledStatus));
}
if (currentTime - sleepTimeShot >= sleepInterval) {
sleepTimeShot = currentTime;
toSleep();
}
}
void toSleep() {
sleep_enable();
attachInterrupt(digitalPinToInterrupt(btnPin), wakeUp, CHANGE);
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
digitalWrite(ledPin, LOW);
delay(1000);
sleep_cpu();
Serial.println("just woke up!");
digitalWrite(ledPin, HIGH);
}
void wakeUp(){
Serial.println("Interrrupt Fired");
sleep_disable();
// detachInterrupt(0);
}