Dans ton code, le µC se met en mode veille après l'instruction
sleep_mode();pendant un certain temps (comme le fût du canon) :
The program will continue from here after the WDT timeoutReste à connaitre la valeur de ce timout (WDT : WatchDog Timer) : s'il vaut 10 ms, c'est sûr que tu ne verras rien...
Il existe une instruction qui permet de le régler de 15ms à 8s (exemple ici)
wdt_enable(WDTO_4S);
Il est possible de choisir un réveil par interruption (openclassrooms) :
void wakeCallback() {
/* rien */
}
void sleepPwrDown() {
// Configuration du type de sleep
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
// Autorisation du mode sleep
sleep_enable();
// Attachement d'une interruption sur front descendant de INT0
attachInterrupt(0, wakeCallback, FALLING);
// Activation du mode sleep
sleep_mode();
// CPU en mode sleep,
// Attente de l'interruption INT0 qui réveillera le CPU
// Désactivation du mode sleep
sleep_disable();
}