mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
131 lines
3.8 KiB
C++
131 lines
3.8 KiB
C++
#pragma once
|
|
//
|
|
// FILE: dhtnew.h
|
|
// AUTHOR: Rob Tillaart
|
|
// VERSION: 0.4.20
|
|
// PURPOSE: DHT Temperature & Humidity Sensor library for Arduino
|
|
// URL: https://github.com/RobTillaart/DHTNEW
|
|
//
|
|
// DHT PIN layout from left to right
|
|
// =================================
|
|
// FRONT : DESCRIPTION
|
|
// pin 1 : VCC
|
|
// pin 2 : DATA
|
|
// pin 3 : Not Connected
|
|
// pin 4 : GND
|
|
|
|
|
|
#include "Arduino.h"
|
|
|
|
|
|
#define DHTNEW_LIB_VERSION (F("0.4.20"))
|
|
|
|
|
|
#define DHTLIB_OK 0
|
|
#define DHTLIB_ERROR_CHECKSUM -1
|
|
#define DHTLIB_ERROR_TIMEOUT_A -2
|
|
#define DHTLIB_ERROR_BIT_SHIFT -3
|
|
#define DHTLIB_ERROR_SENSOR_NOT_READY -4
|
|
#define DHTLIB_ERROR_TIMEOUT_C -5
|
|
#define DHTLIB_ERROR_TIMEOUT_D -6
|
|
#define DHTLIB_ERROR_TIMEOUT_B -7
|
|
#define DHTLIB_WAITING_FOR_READ -8
|
|
|
|
// optionally detect out of range values.
|
|
// occurs seldom so not enabled by default.
|
|
// #define DHTLIB_VALUE_OUT_OF_RANGE
|
|
#define DHTLIB_HUMIDITY_OUT_OF_RANGE -100
|
|
#define DHTLIB_TEMPERATURE_OUT_OF_RANGE -101
|
|
|
|
// allows to overrule DHTLIB_INVALID_VALUE e.g. to prevent spike in graphs.
|
|
#ifndef DHTLIB_INVALID_VALUE
|
|
#define DHTLIB_INVALID_VALUE -999
|
|
#endif
|
|
|
|
|
|
// bits are timing based (datasheet)
|
|
// 26-28us ==> 0
|
|
// 70 us ==> 1
|
|
// See https://github.com/RobTillaart/DHTNew/issues/11
|
|
#ifndef DHTLIB_BIT_THRESHOLD
|
|
#define DHTLIB_BIT_THRESHOLD 50
|
|
#endif
|
|
|
|
|
|
class DHTNEW
|
|
{
|
|
public:
|
|
|
|
DHTNEW(uint8_t pin);
|
|
|
|
// resets all internals to construction time
|
|
// might help to reset a sensor behaving badly
|
|
void reset();
|
|
|
|
// 0 = unknown
|
|
// 11 = DHT11 and compatibles
|
|
// 22 = DHT22 and compatibles
|
|
// 23 = mapped to 22 for now (AM23xx)
|
|
// 70 = Sonoff Si7021
|
|
uint8_t getType();
|
|
void setType(uint8_t type = 0);
|
|
int read();
|
|
|
|
// lastRead is in MilliSeconds since start sketch
|
|
uint32_t lastRead() { return _lastRead; };
|
|
|
|
// preferred interface
|
|
float getHumidity() { return _humidity; };
|
|
float getTemperature() { return _temperature; };
|
|
|
|
// adding offsets works well in normal range
|
|
// might introduce under- or overflow at the ends of the sensor range
|
|
void setHumOffset(float offset) { _humOffset = offset; };
|
|
void setTempOffset(float offset) { _tempOffset = offset; };
|
|
float getHumOffset() { return _humOffset; };
|
|
float getTempOffset() { return _tempOffset; };
|
|
|
|
bool getDisableIRQ() { return _disableIRQ; };
|
|
void setDisableIRQ(bool b ) { _disableIRQ = b; };
|
|
|
|
bool getWaitForReading() { return _waitForRead; };
|
|
void setWaitForReading(bool b ) { _waitForRead = b; };
|
|
|
|
// set readDelay to 0 will reset to datasheet values
|
|
uint16_t getReadDelay() { return _readDelay; };
|
|
void setReadDelay(uint16_t rd = 0) { _readDelay = rd; };
|
|
|
|
// minimal support for low power applications.
|
|
// after powerUp one must wait up to two seconds.
|
|
void powerUp();
|
|
void powerDown();
|
|
|
|
// suppress error values of -999 => check return value of read() instead
|
|
bool getSuppressError() { return _suppressError; };
|
|
void setSuppressError(bool b) { _suppressError = b; };
|
|
|
|
|
|
private:
|
|
uint8_t _dataPin = 0;
|
|
uint32_t _wakeupDelay = 0;
|
|
uint8_t _type = 0;
|
|
float _humOffset = 0.0;
|
|
float _tempOffset = 0.0;
|
|
float _humidity = 0.0;
|
|
float _temperature = 0.0;
|
|
uint32_t _lastRead = 0;
|
|
bool _disableIRQ = true;
|
|
bool _waitForRead = false;
|
|
bool _suppressError = false;
|
|
uint16_t _readDelay = 0;
|
|
|
|
uint8_t _bits[5]; // buffer to receive data
|
|
int _read();
|
|
int _readSensor();
|
|
bool _waitFor(uint8_t state, uint32_t timeout);
|
|
};
|
|
|
|
|
|
// -- END OF FILE --
|
|
|