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

Dependents:   NewDHT11Test

idDHTLib.h

Committer:
kfigiela
Date:
2013-11-19
Revision:
0:53913db38502

File content as of revision 0:53913db38502:

/*
    FILE:       idDHTLib.h
    VERSION:    0.0.3
    PURPOSE:    Interrupt driven Lib for DHT11 and DHT22 for mbed.
    LICENCE:    GPL v3 (http://www.gnu.org/licenses/gpl.html)
    DATASHEET: http://www.micro4you.com/files/sensor/DHT11.pdf
    DATASHEET: http://www.adafruit.com/datasheets/DHT22.pdf
    
    Based on idDHT11 library: https://github.com/niesteszeck/idDHT11
    Based on DHTLib library: http://playground.arduino.cc/Main/DHTLib
    Based on code proposed: http://forum.arduino.cc/index.php?PHPSESSID=j6n105kl2h07nbj72ac4vbh4s5&topic=175356.0
    Mbed port of Arduino library: https://github.com/niesteszeck/idDHTLib
    
    Changelog:
        v 0.0.1
            fork from idDHT11 lib
            change names to idDHTLib
            added DHT22 functionality
        v 0.0.2
            Optimization on shift var (pylon from Arduino Forum)
        v 0.0.3
            Timing correction to finally work properly on DHT22
            (Dessimat0r from Arduino forum)
 */

#ifndef idDHTLib_H__
#define idDHTLib_H__

#define IDDHTLIB_VERSION "0.0.3"
#include "mbed.h"

// state codes
#define IDDHTLIB_OK         0
#define IDDHTLIB_ACQUIRING      1
#define IDDHTLIB_ACQUIRED       2
#define IDDHTLIB_RESPONSE_OK        3

// error codes
#define IDDHTLIB_ERROR_CHECKSUM     -1
#define IDDHTLIB_ERROR_TIMEOUT      -2
#define IDDHTLIB_ERROR_ACQUIRING    -3
#define IDDHTLIB_ERROR_DELTA        -4
#define IDDHTLIB_ERROR_NOTSTARTED   -5

#define IDDHTLIB_CHECK_STATE        if(state == STOPPED)            \
                        return status;          \
                    else if(state != ACQUIRED)      \
                        return IDDHTLIB_ERROR_ACQUIRING;
                                    
class idDHTLib
{
public:
    idDHTLib(PinName pin, void (*isrCallback_wrapper)());
    void init(PinName pin, void (*isrCallback_wrapper)());
    void dht11Callback();
    void dht22Callback();
    int acquire();
    int acquireAndWait();
    float getCelsius();
    float getFahrenheit();
    float getKelvin();
    double getDewPoint();
    double getDewPointSlow();
    float getHumidity();
    bool acquiring();
    int getStatus();
    
private:
    Timer t;
    void (*isrCallback_wrapper)(void);
    pFunctionPointer_t  handler;
    enum states{RESPONSE=0,DATA=1,ACQUIRED=2,STOPPED=3,ACQUIRING=4};
    volatile states state;
    volatile int status;
    volatile char bits[5];
    volatile char cnt;
    volatile char idx;
//    volatile int us;
    
    DigitalInOut inOut;
    InterruptIn intIn;
    PinName pin;
    volatile float hum;
    volatile float temp;
    void isrCallback(bool dht22);
};
#endif // idDHTLib_H__