Ottimo consiglio Leo72, che svista. non me ne ero proprio accorto!
Ho fatto qualche modifica al codice e ora sembra fare quello che voglio, devo solo ricontrollare i tempi ma è un problema secondario.
Questo è il codice che utilizzo ora, nei commenti ci sono alcune note o domande che vorrei farvi.
//sapevo che alcuni compilatori escludevano direttamente le librerie che difatto non venivano usate
//funziona lo stesso per il compilatore di Arduino ?
#include <Arduino.h>
#include <WProgram.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <avr/power.h>
//variabili
int out1 = A2;
int out2 = A3;
byte statouscita = 1;
int t = 0; //primo counter per tenere acceso un led 1 minuto
volatile unsigned int counter = 0;
volatile byte flag = 0;
void setup()
{
MCUSR = 0; //resetta il registro di stato della MCU
wdt_disable(); //disattiva il watchdog
pinMode(out2, OUTPUT);
pinMode(out2, OUTPUT);
setWdt(); //imposta il watchdog
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
}
void loop()
{
power_all_disable();
sleep_mode(); //cpu a nanna - corrisponde a sleep_enable+sleep_cpu+sleep_disable
power_all_enable();
//"punto cruciale"
if (flag)
{
wdt_disable();
counter = 0;
flag = 0;
statouscita ^= 1; //cambio lo stato al led
digitalWrite(out1, statouscita);
if(t==10)
{
digitalWrite(out1,LOW);
digitalWrite(out2,HIGH);
delay(5000);
digitalWrite(out2,LOW);
t=0;
}
setWdt(); //reimposta il watchdog
}
}
void setWdt() {
SREG &= ~(1<<SREG_I); //disattiva tutti gli interrupt
//imposta il registro del watchdog
WDTCR |= ((1<<WDCE) | (1<<WDE)); //qui è il watchdog time control registrer di cui parlavo
//imposta la modalità "interrupt" ed il timeout ad 1 secondo
WDTCR = ((1<<WDIE)| (1<<WDP2) | (1<<WDP1));
SREG |= (1<<SREG_I); //riattiviamo gli interrupt globali
}
// come funziona esattamente questo punto ? io sfrutto questo "clock" per incrementare il contatore che mi permette di spegnere il led1 e accendere il led2 ad un certo momento.
ISR(WDT_vect) {
if (++counter >= 1) { //impostare qui il numero di timeout (secondi) - timeout di cosa?
flag = 1;
t++;
}
}
allora sfutto l'occasione per farti i complimenti per l'ottimo materiale online!