DHT22 --- Temperature & Humidity Sensor
Fork of DHT22 by
DHT22.cpp@1:8b95fd076a28, 2016-05-23 (annotated)
- 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?
User | Revision | Line number | New 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 | } |