Go Down

Topic: Mise en sommeil arduino pro mini (Read 614 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
 

Quick Reply

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

Note: this post will not display until it's been approved by a moderator.
Name:
Email:

shortcuts: alt+s submit/post or alt+p preview