Interrupt driven DHT11/DHT22 library, port of Arduino idDHTLib (https://github.com/niesteszeck/idDHTLib)

Dependents:   NewDHT11Test

Committer:
kfigiela
Date:
Tue Nov 19 19:36:47 2013 +0000
Revision:
0:53913db38502
DHT11 and DHT22 working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kfigiela 0:53913db38502 1 /*
kfigiela 0:53913db38502 2 FILE: idDHTLib.h
kfigiela 0:53913db38502 3 VERSION: 0.0.3
kfigiela 0:53913db38502 4 PURPOSE: Interrupt driven Lib for DHT11 and DHT22 for mbed.
kfigiela 0:53913db38502 5 LICENCE: GPL v3 (http://www.gnu.org/licenses/gpl.html)
kfigiela 0:53913db38502 6 DATASHEET: http://www.micro4you.com/files/sensor/DHT11.pdf
kfigiela 0:53913db38502 7 DATASHEET: http://www.adafruit.com/datasheets/DHT22.pdf
kfigiela 0:53913db38502 8
kfigiela 0:53913db38502 9 Based on idDHT11 library: https://github.com/niesteszeck/idDHT11
kfigiela 0:53913db38502 10 Based on DHTLib library: http://playground.arduino.cc/Main/DHTLib
kfigiela 0:53913db38502 11 Based on code proposed: http://forum.arduino.cc/index.php?PHPSESSID=j6n105kl2h07nbj72ac4vbh4s5&topic=175356.0
kfigiela 0:53913db38502 12 Mbed port of Arduino library: https://github.com/niesteszeck/idDHTLib
kfigiela 0:53913db38502 13
kfigiela 0:53913db38502 14 Changelog:
kfigiela 0:53913db38502 15 v 0.0.1
kfigiela 0:53913db38502 16 fork from idDHT11 lib
kfigiela 0:53913db38502 17 change names to idDHTLib
kfigiela 0:53913db38502 18 added DHT22 functionality
kfigiela 0:53913db38502 19 v 0.0.2
kfigiela 0:53913db38502 20 Optimization on shift var (pylon from Arduino Forum)
kfigiela 0:53913db38502 21 v 0.0.3
kfigiela 0:53913db38502 22 Timing correction to finally work properly on DHT22
kfigiela 0:53913db38502 23 (Dessimat0r from Arduino forum)
kfigiela 0:53913db38502 24 */
kfigiela 0:53913db38502 25
kfigiela 0:53913db38502 26 #ifndef idDHTLib_H__
kfigiela 0:53913db38502 27 #define idDHTLib_H__
kfigiela 0:53913db38502 28
kfigiela 0:53913db38502 29 #define IDDHTLIB_VERSION "0.0.3"
kfigiela 0:53913db38502 30 #include "mbed.h"
kfigiela 0:53913db38502 31
kfigiela 0:53913db38502 32 // state codes
kfigiela 0:53913db38502 33 #define IDDHTLIB_OK 0
kfigiela 0:53913db38502 34 #define IDDHTLIB_ACQUIRING 1
kfigiela 0:53913db38502 35 #define IDDHTLIB_ACQUIRED 2
kfigiela 0:53913db38502 36 #define IDDHTLIB_RESPONSE_OK 3
kfigiela 0:53913db38502 37
kfigiela 0:53913db38502 38 // error codes
kfigiela 0:53913db38502 39 #define IDDHTLIB_ERROR_CHECKSUM -1
kfigiela 0:53913db38502 40 #define IDDHTLIB_ERROR_TIMEOUT -2
kfigiela 0:53913db38502 41 #define IDDHTLIB_ERROR_ACQUIRING -3
kfigiela 0:53913db38502 42 #define IDDHTLIB_ERROR_DELTA -4
kfigiela 0:53913db38502 43 #define IDDHTLIB_ERROR_NOTSTARTED -5
kfigiela 0:53913db38502 44
kfigiela 0:53913db38502 45 #define IDDHTLIB_CHECK_STATE if(state == STOPPED) \
kfigiela 0:53913db38502 46 return status; \
kfigiela 0:53913db38502 47 else if(state != ACQUIRED) \
kfigiela 0:53913db38502 48 return IDDHTLIB_ERROR_ACQUIRING;
kfigiela 0:53913db38502 49
kfigiela 0:53913db38502 50 class idDHTLib
kfigiela 0:53913db38502 51 {
kfigiela 0:53913db38502 52 public:
kfigiela 0:53913db38502 53 idDHTLib(PinName pin, void (*isrCallback_wrapper)());
kfigiela 0:53913db38502 54 void init(PinName pin, void (*isrCallback_wrapper)());
kfigiela 0:53913db38502 55 void dht11Callback();
kfigiela 0:53913db38502 56 void dht22Callback();
kfigiela 0:53913db38502 57 int acquire();
kfigiela 0:53913db38502 58 int acquireAndWait();
kfigiela 0:53913db38502 59 float getCelsius();
kfigiela 0:53913db38502 60 float getFahrenheit();
kfigiela 0:53913db38502 61 float getKelvin();
kfigiela 0:53913db38502 62 double getDewPoint();
kfigiela 0:53913db38502 63 double getDewPointSlow();
kfigiela 0:53913db38502 64 float getHumidity();
kfigiela 0:53913db38502 65 bool acquiring();
kfigiela 0:53913db38502 66 int getStatus();
kfigiela 0:53913db38502 67
kfigiela 0:53913db38502 68 private:
kfigiela 0:53913db38502 69 Timer t;
kfigiela 0:53913db38502 70 void (*isrCallback_wrapper)(void);
kfigiela 0:53913db38502 71 pFunctionPointer_t handler;
kfigiela 0:53913db38502 72 enum states{RESPONSE=0,DATA=1,ACQUIRED=2,STOPPED=3,ACQUIRING=4};
kfigiela 0:53913db38502 73 volatile states state;
kfigiela 0:53913db38502 74 volatile int status;
kfigiela 0:53913db38502 75 volatile char bits[5];
kfigiela 0:53913db38502 76 volatile char cnt;
kfigiela 0:53913db38502 77 volatile char idx;
kfigiela 0:53913db38502 78 // volatile int us;
kfigiela 0:53913db38502 79
kfigiela 0:53913db38502 80 DigitalInOut inOut;
kfigiela 0:53913db38502 81 InterruptIn intIn;
kfigiela 0:53913db38502 82 PinName pin;
kfigiela 0:53913db38502 83 volatile float hum;
kfigiela 0:53913db38502 84 volatile float temp;
kfigiela 0:53913db38502 85 void isrCallback(bool dht22);
kfigiela 0:53913db38502 86 };
kfigiela 0:53913db38502 87 #endif // idDHTLib_H__