Pages: [1]   Go Down
Author Topic: Mise en sommeil arduino pro mini  (Read 594 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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
« Last Edit: November 18, 2011, 02:32:18 pm by swatre » Logged

Pages: [1]   Go Up
Jump to: