Interrupt driven DHT11/DHT22 library, port of Arduino idDHTLib (https://github.com/niesteszeck/idDHTLib)
idDHTLib.h@0:53913db38502, 2013-11-19 (annotated)
- Committer:
- kfigiela
- Date:
- Tue Nov 19 19:36:47 2013 +0000
- Revision:
- 0:53913db38502
DHT11 and DHT22 working
Who changed what in which revision?
User | Revision | Line number | New 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__ |