🛠 Sommeil profond et réveil par watchdog

Arduino Nano Every · avance · Schéma : IMG-nano-every-avance-2-nanoevery-sleep-watchdog.svg — Nano Every endormie alimentée par une pile, croissant de lune au-dessus de la carte, petit chien de garde (watchdog) dessiné à côté d'un chronomètre une seconde, LED 13 allumée brièvement

Objectifs

Réduire la consommation de la Nano Every pour un capteur sur pile : endormir le cœur en SLEEP_MODE_PWR_DOWN et le réveiller périodiquement grâce au watchdog de l'ATmega4809. Sur cette famille, le watchdog déclenche par défaut une réinitialisation : on exploite ce reset comme une alarme, en distinguant un redémarrage sur watchdog d'un démarrage normal.

Matériel

Code complet

// Sommeil profond, réveil ~1 s via watchdog (reset comme alarme)
#include <avr/sleep.h>
#include <avr/wdt.h>

void setup {
  pinMode(LED_BUILTIN, OUTPUT);
  wdt_reset;
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  // mode le plus profond
  sleep_disable;                       // armement a la volee
  wdt_enable(WDTO_1S);                   // delai 1 s
}

void loop {
  digitalToggle(LED_BUILTIN);            // signal d'activite brève
  delay(50);
  wdt_reset;                           // eviter le reset immediat
  sleep_enable;
  sleep_cpu;                           // dort jusqu'au reset WDT
  // A ce point : le watchdog a réinitialise la carte, setup tourne
  // a nouveau avant de revenir ici.
}

Vérification attendue

La LED 13 clignote brièvement chaque seconde. Entre deux clignotements, le cœur est éteint : en alimentation sur pile et USB débranché, un microampèremètre doit montrer une moyenne très inférieure au mode actif (le gain exact dépend du mode et des périphériques restés actifs).

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels