DHT22 --- Temperature & Humidity Sensor

Fork of DHT22 by Stefan Nielsen

Committer:
chiang404
Date:
Mon May 23 11:12:15 2016 +0000
Revision:
1:8b95fd076a28
Parent:
0:7fd3ff04ae95
DHT22 --- Temperature & Humidity Sensor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Julepalme 0:7fd3ff04ae95 1 #include "DHT22.h"
Julepalme 0:7fd3ff04ae95 2
chiang404 1:8b95fd076a28 3 #define timeout 200
Julepalme 0:7fd3ff04ae95 4
Julepalme 0:7fd3ff04ae95 5 DHT22::DHT22(PinName pin) {
Julepalme 0:7fd3ff04ae95 6 _data_pin = pin;
chiang404 1:8b95fd076a28 7 DigitalInOut dht(_data_pin);
chiang404 1:8b95fd076a28 8 dht.output();
chiang404 1:8b95fd076a28 9 dht.write(1);
Julepalme 0:7fd3ff04ae95 10 }
Julepalme 0:7fd3ff04ae95 11
Julepalme 0:7fd3ff04ae95 12 int DHT22::getTemperature() {
Julepalme 0:7fd3ff04ae95 13 return _temperature;
Julepalme 0:7fd3ff04ae95 14 }
Julepalme 0:7fd3ff04ae95 15
Julepalme 0:7fd3ff04ae95 16 int DHT22::getHumidity() {
Julepalme 0:7fd3ff04ae95 17 return _humidity;
Julepalme 0:7fd3ff04ae95 18 }
Julepalme 0:7fd3ff04ae95 19
Julepalme 0:7fd3ff04ae95 20 bool DHT22::sample() {
chiang404 1:8b95fd076a28 21 __disable_irq(); // Disable Interrupts
chiang404 1:8b95fd076a28 22 Timer t;
chiang404 1:8b95fd076a28 23 DigitalInOut dht(_data_pin);
Julepalme 0:7fd3ff04ae95 24 int dht22_dat [5];
chiang404 1:8b95fd076a28 25 dht.output();
chiang404 1:8b95fd076a28 26 dht.write(0);
chiang404 1:8b95fd076a28 27 wait_ms(1);
chiang404 1:8b95fd076a28 28 dht.write(1);
chiang404 1:8b95fd076a28 29 dht.input();
Julepalme 0:7fd3ff04ae95 30 wait_us(40);
Julepalme 0:7fd3ff04ae95 31 wait_us(80);
Julepalme 0:7fd3ff04ae95 32 int i,j,result=0;
Julepalme 0:7fd3ff04ae95 33 for (i=0; i<5; i++) {
chiang404 1:8b95fd076a28 34 result=0;
Julepalme 0:7fd3ff04ae95 35 for (j=0; j<8; j++) {
chiang404 1:8b95fd076a28 36 while(dht.read());
chiang404 1:8b95fd076a28 37 while(!dht.read());
chiang404 1:8b95fd076a28 38 t.reset();
chiang404 1:8b95fd076a28 39 t.start();
chiang404 1:8b95fd076a28 40 while(dht.read());
chiang404 1:8b95fd076a28 41 t.stop();
Julepalme 0:7fd3ff04ae95 42 int p;
chiang404 1:8b95fd076a28 43 if(t.read_us()>50)
chiang404 1:8b95fd076a28 44 p = 1;
chiang404 1:8b95fd076a28 45 else
chiang404 1:8b95fd076a28 46 p = 0;
Julepalme 0:7fd3ff04ae95 47 p=p <<(7-j);
Julepalme 0:7fd3ff04ae95 48 result=result|p;
Julepalme 0:7fd3ff04ae95 49 }
Julepalme 0:7fd3ff04ae95 50 dht22_dat[i] = result;
Julepalme 0:7fd3ff04ae95 51 }
chiang404 1:8b95fd076a28 52 dht.output();
chiang404 1:8b95fd076a28 53 dht.write(1);
Julepalme 0:7fd3ff04ae95 54 int dht22_check_sum;
Julepalme 0:7fd3ff04ae95 55 dht22_check_sum=dht22_dat[0]+dht22_dat[1]+dht22_dat[2]+dht22_dat[3];
Julepalme 0:7fd3ff04ae95 56 dht22_check_sum= dht22_check_sum%256;
Julepalme 0:7fd3ff04ae95 57 if (dht22_check_sum==dht22_dat[4]) {
Julepalme 0:7fd3ff04ae95 58 _humidity=dht22_dat[0]*256+dht22_dat[1];
Julepalme 0:7fd3ff04ae95 59 _temperature=dht22_dat[2]*256+dht22_dat[3];
chiang404 1:8b95fd076a28 60 __enable_irq();
Julepalme 0:7fd3ff04ae95 61 return true;
Julepalme 0:7fd3ff04ae95 62 }
chiang404 1:8b95fd076a28 63 __enable_irq();
Julepalme 0:7fd3ff04ae95 64 return false;
Julepalme 0:7fd3ff04ae95 65 }