#include <DHT22.h>
#include <avr/sleep.h>
#include <avr/wdt.h>
#define DHT22_PIN 2 //communication avec le capteur DHT22
#define DHT22_POWER 5 //alimentation du capteur DHT22
DHT22 dht22(DHT22_PIN); //création instance dht
ISR (WDT_vect)
{
wdt_disable(); //désactive le watchdog
}
void mywatchdogenable()
{
MCUSR = 0;
WDTCSR = _BV (WDCE) | _BV (WDE);
WDTCSR = _BV (WDIE) | _BV (WDP3) | _BV (WDP0); //délai de 8 secondes
wdt_reset();
ADCSRA = 0; //désactive ADC
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
sleep_enable();
MCUCR = _BV (BODS) | _BV (BODSE);
MCUCR = _BV (BODS);
sleep_cpu();
sleep_disable();
}
void setup()
{
pinMode(DHT22_POWER, OUTPUT);
Serial.begin(9600);
}
void loop ()
{
digitalWrite(DHT22_POWER, HIGH); //alimente le capteur DHT22
delay(5000);
DHT22_ERROR_t errorCode;
errorCode = dht22.readData();
switch(errorCode)
{
case DHT_ERROR_NONE:
Serial.print(dht22.getTemperatureC());
Serial.print(« C
Serial.print(dht22.getHumidity());
Serial.println(« % »);
delay(500);
break;
case DHT_ERROR_CHECKSUM:
Serial.println(« check sum error « );
break;
case DHT_BUS_HUNG:
Serial.println(« BUS Hung « );
break;
case DHT_ERROR_NOT_PRESENT:
Serial.println(« Not Present « );
break;
case DHT_ERROR_ACK_TOO_LONG:
Serial.println(« ACK time out « );
break;
case DHT_ERROR_SYNC_TIMEOUT:
Serial.println(« Sync Timeout « );
break;
case DHT_ERROR_DATA_TIMEOUT:
Serial.println(« Data Timeout « );
break;
case DHT_ERROR_TOOQUICK:
Serial.println(« Polled to quick « );
break;
}
digitalWrite(DHT22_POWER, LOW); //arrêt de l’alimentation du DTH22
for (int i=0; i < 8; i++) //mise en veille pendant 64 secondes
mywatchdogenable();
}
Views: 5