Arduino en mode sleep

Bonsoir, comme vu dans le titre, j'aimerais mettre un arduino en mode sommeil dès qu'il est alimenté. Je veux dire, que l'arduino est normalement en "sleep" et lorsqu'il reçoit un caractère sur "rx", il se réveille pendant 10 secondes, le temps de faire ce qu'il doit effectuer. Je me suis basé sur le code de l'arduino suivant, en mettant bien la résistance entre rx et la broche 2.

http://www.arduino.cc/playground/Learning/ArduinoSleepCode

J'ai fait mon propre programme, mais ici, mon arduino n'a pas l'air de quitter le mode sleep, je dis ça parce que le terminal arduino n'affiche pas ce qu'il y a dans mon if(Serial.available())

#include <avr/sleep.h>

int wakePin = 2;                 
int sleepStatus = 0;             
int count = 0;
void wakeUpNow()        
{

}
void setup()
{
  pinMode(wakePin, INPUT);
  Serial.begin(9600);
  attachInterrupt(0, wakeUpNow, CHANGE);
}
void sleepNow()         
{
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);   

    sleep_enable();          
    sleep_mode();            
    sleep_disable();             
    detachInterrupt(0);      
    

}
void loop()
{
  if(Serial.available())
  {
    char c = Serial.read();
    count ++;
    Serial.print("Awake for ");
    Serial.print(count);
    Serial.println(" sec");
    delay(1000);    
  }
  else
  {
    count=0;
    Serial.println("SleepMode");
    sleepNow();    
  }
}

J'aimerais savoir ce qui est faux dans ce programme et aussi comment est-ce que je peux savoir si mon arduino est en sleep ou pas?

Merci d'avance

Salut,

Deja je vois que tu oublis de "réarmer" l'interrupt dans Sleepnow.

void sleepNow()         
{
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);   

    sleep_enable();          
    attachInterrupt(0,wakeUpNow, CHANGE); 
    sleep_mode();            
    sleep_disable();             
    detachInterrupt(0);      
    

}

Ensuite si tu veux voir s'il entre en mode sleep regarde au niveau de la conso :wink:

Merci pour ta réponse, j'ai rajouté la ligne de code qu'il manquait mais ça ne change rien... A chaque fois que j'envoie qqh avec le terminal, je reçois des caractères vraiment spéciaux,comme si je n'avais pas le même baud rate des 2 côtés

et en mettant une petit pause avant de commencer à envoyer des caractères (moi, tant que mon café du matin a pas fait effet, je suis bon à rien, c'est peut être aussi le cas de l'arduino : il lui faut un petit "temps" avant de sortir de sommeil)

Sinon, il peut aussi y avoir un problème :

  • de câblage (j'ai un doute)
  • de configuration (plus probable)

As-tu converti les caractères que tu reçois en binaire, et comparer avec ceux que l'arduino envoie ?
Exemple : tu envoie "01110110" et tu reçois "1110110x"

oui je sais :wink: le café avait pas encore fait effet ...