Go Down

Topic: Mise en sommeil arduino pro mini (Read 652 times) previous topic - next topic

swatre

Nov 18, 2011, 08:30 pm Last Edit: Nov 18, 2011, 08:32 pm by swatre Reason: 1
Bonjour,

J'utilise un bout de code trouvé sur l'excellent site http://jeelabs.org/ pour mettre en sommeil mon montage et le réveiller toutes les 60 secondes pour transmettre la température extérieure de mon appart par radio l'intérêt de ce code est d'économiser la pile 9v qui alimente le montage. c'est d'ailleurs assez efficace puisque qu'en mode veille mon circuit ne consomme "que" 130µA.
Seulement le bout de code proposé met en réalité en sommeil l'arduino pour 1 s donc je boucle 60 fois avant de faire ma mesure du coup il y a toutes les secondes une pointe de conso de quelques cycles d'horloge le temps d'incrémenter la boucle
Est-il possible de faire mieux ? càd le plonger dans un sommeil de 60s. Je ne comprends absolument rien au code trouvé sur le site, j'ai essayé de modifier un peu le code je suis juste arrivé à planter complétement l'arduino m'obligeant à faire un hard Reset pour pouvoir reprendre la main dessus.
Voici le code
Code: [Select]
#include <VirtualWire.h>
#include "Wire.h"
#include "avr/sleep.h"


int tmp102Address = 0x48;
byte tmp102[4];

ISR(WDT_vect){
}

void setup()
{
// Bout de code trouvé sur le site jeelabs.org
 MCUSR &=~(1<<WDRF);
 cli();
 WDTCSR |= (1<<WDCE) | (1<<WDE);
 WDTCSR = 6;
 WDTCSR |= bit(WDIE);
 sei();
// fin de code
//  Serial.begin(57600);
 Wire.begin(); // start the I2C library
 vw_setup(1000);
}

void loop()
{
 for (int i=1; i<=60; i++){
// bout de code en provenance du site jeelabs.org
   delay(3);
   uint8_t prrSave = PRR, adcsraSave = ADCSRA;
   ADCSRA &= ~ bit(ADEN);
   PRR &= ~ bit(PRADC);
   set_sleep_mode(SLEEP_MODE_PWR_DOWN);
   sleep_mode();
   PRR = prrSave;
   ADCSRA = adcsraSave;
 }
// fin de code
 tmp102[0]=3;
 
 Wire.requestFrom(tmp102Address,2);

 byte MSB = Wire.receive();
 byte LSB = Wire.receive();
 int TemperatureSum = ((MSB << 8) | LSB) >> 4;  


 tmp102[1]=LSB;
 tmp102[2]=MSB;
 tmp102[3]=1;
 vw_send((uint8_t *)tmp102, sizeof(tmp102));
 delay(130);
}


Merci pour votre aide

Go Up