#include <avr/sleep.h>
#include <avr/power.h>
#define LED_PIN 13
#define SLEEPTIME 60
volatile bool toggle = true;
volatile uint8_t wakeUpCounter = 0; // Zähler für 1 Minute
void setup(){
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
// configure timer1
TCCR1A = 0x00;
TCNT1 = 0x0000; // reset timer
TCCR1B = 0x05; // prescaler auf 1024 (16MHz/1024 = 15625 Hz)
TIMSK1 = 0x01; // enable timer overflow interrupt
}
void loop(){
if(toggle){
toggle = false;
Serial.println("good morning");
delay(1000);
Serial.println("do something...");
delay(1000);
Serial.println("good night");
enterSleepMode();
}
}
void enterSleepMode(void){
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_enable();
power_adc_disable();
power_spi_disable();
power_timer0_disable();
power_timer2_disable();
power_twi_disable();
sleep_mode();
sleep_disable();
power_all_enable();
}
ISR(TIMER1_OVF_vect){ // Timer1 Overflow-Interrupt (4.19s)
wakeUpCounter++;
if (wakeUpCounter >= SLEEPTIME/4) { // after 15 = 60/4 (counter)
wakeUpCounter = 0; // reset counter
toggle = true; // run loop()
}
}