97 lines
2.3 KiB
C++
97 lines
2.3 KiB
C++
/******************************************************************
|
|
DHT Temperature & Humidity Sensor library for Arduino.
|
|
|
|
Features:
|
|
- Support for DHT11 and DHT22/AM2302/RHT03
|
|
- Auto detect sensor model
|
|
- Very low memory footprint
|
|
- Very small code
|
|
|
|
http://www.github.com/markruys/arduino-DHT
|
|
|
|
Written by Mark Ruys, mark@paracas.nl.
|
|
|
|
BSD license, check license.txt for more information.
|
|
All text above must be included in any redistribution.
|
|
|
|
Datasheets:
|
|
- http://www.micro4you.com/files/sensor/DHT11.pdf
|
|
- http://www.adafruit.com/datasheets/DHT22.pdf
|
|
- http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Weather/RHT03.pdf
|
|
- http://meteobox.tk/files/AM2302.pdf
|
|
|
|
Changelog:
|
|
2013-06-10: Initial version
|
|
2013-06-12: Refactored code
|
|
2013-07-01: Add a resetTimer method
|
|
******************************************************************/
|
|
|
|
#ifndef dht_h
|
|
#define dht_h
|
|
|
|
#if ARDUINO < 100
|
|
#include <WProgram.h>
|
|
#else
|
|
#include <Arduino.h>
|
|
#endif
|
|
|
|
class DHT
|
|
{
|
|
public:
|
|
|
|
typedef enum {
|
|
AUTO_DETECT,
|
|
DHT11,
|
|
DHT22,
|
|
AM2302, // Packaged DHT22
|
|
RHT03 // Equivalent to DHT22
|
|
}
|
|
DHT_MODEL_t;
|
|
|
|
typedef enum {
|
|
ERROR_NONE = 0,
|
|
ERROR_TIMEOUT,
|
|
ERROR_CHECKSUM
|
|
}
|
|
DHT_ERROR_t;
|
|
|
|
void setup(uint8_t pin, DHT_MODEL_t model=AUTO_DETECT);
|
|
void resetTimer();
|
|
|
|
float getTemperature();
|
|
float getHumidity();
|
|
|
|
DHT_ERROR_t getStatus() { return error; };
|
|
const char* getStatusString();
|
|
|
|
DHT_MODEL_t getModel() { return model; }
|
|
|
|
int getMinimumSamplingPeriod() { return model == DHT11 ? 1000 : 2000; }
|
|
|
|
int8_t getNumberOfDecimalsTemperature() { return model == DHT11 ? 0 : 1; };
|
|
int8_t getLowerBoundTemperature() { return model == DHT11 ? 0 : -40; };
|
|
int8_t getUpperBoundTemperature() { return model == DHT11 ? 50 : 125; };
|
|
|
|
int8_t getNumberOfDecimalsHumidity() { return 0; };
|
|
int8_t getLowerBoundHumidity() { return model == DHT11 ? 20 : 0; };
|
|
int8_t getUpperBoundHumidity() { return model == DHT11 ? 90 : 100; };
|
|
|
|
static float toFahrenheit(float fromCelcius) { return 1.8 * fromCelcius + 32.0; };
|
|
static float toCelsius(float fromFahrenheit) { return (fromFahrenheit - 32.0) / 1.8; };
|
|
|
|
protected:
|
|
void readSensor();
|
|
|
|
float temperature;
|
|
float humidity;
|
|
|
|
uint8_t pin;
|
|
|
|
private:
|
|
DHT_MODEL_t model;
|
|
DHT_ERROR_t error;
|
|
unsigned long lastReadTime;
|
|
};
|
|
|
|
#endif /*dht_h*/
|