2022-05-08 07:05:13 -04:00
|
|
|
#pragma once
|
|
|
|
//
|
|
|
|
// FILE: dhtint.h
|
|
|
|
// AUTHOR: Rob Tillaart
|
2022-11-02 06:22:23 -04:00
|
|
|
// VERSION: 0.1.3
|
2022-05-08 07:05:13 -04:00
|
|
|
// PURPOSE: Arduino library for DHT sensors - integer only
|
|
|
|
// URL: https://github.com/RobTillaart/DHTINT
|
|
|
|
|
|
|
|
|
2022-11-02 06:22:23 -04:00
|
|
|
// DHT PIN layout from left to right
|
|
|
|
// =================================
|
|
|
|
// FRONT : DESCRIPTION
|
|
|
|
// pin 1 : VCC
|
|
|
|
// pin 2 : DATA
|
|
|
|
// pin 3 : Not Connected
|
|
|
|
// pin 4 : GND
|
2022-05-08 07:05:13 -04:00
|
|
|
|
|
|
|
|
|
|
|
#include "Arduino.h"
|
|
|
|
|
|
|
|
|
2022-11-02 06:22:23 -04:00
|
|
|
#define DHTINT_LIB_VERSION (F("0.1.3 experimental"))
|
2022-05-08 07:05:13 -04:00
|
|
|
|
|
|
|
|
|
|
|
#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 DHTINT
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
DHTINT(uint8_t pin);
|
|
|
|
|
|
|
|
// resets all internals to construction time
|
|
|
|
// might help to reset a sensor behaving badly..
|
|
|
|
void reset();
|
|
|
|
|
|
|
|
// 0 = unknown, 11 or 22
|
|
|
|
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
|
2022-05-16 14:05:48 -04:00
|
|
|
int getHumidity();
|
|
|
|
int getTemperature();
|
2022-05-08 07:05:13 -04:00
|
|
|
|
|
|
|
// adding offsets works well in normal range
|
|
|
|
// might introduce under- or overflow at the ends of the sensor range
|
2022-05-16 14:05:48 -04:00
|
|
|
void setHumOffset(int offset) { _humOffset = offset * 10; };
|
|
|
|
void setTempOffset(int offset) { _tempOffset = offset * 10; };
|
|
|
|
int getHumOffset() { return _humOffset / 10; };
|
|
|
|
int getTempOffset() { return _tempOffset / 10; };
|
|
|
|
|
|
|
|
// set offset in 1/10th
|
|
|
|
void setHumOffsetDecimal(int offset) { _humOffset = offset; };
|
|
|
|
void setTempOffsetDecimal(int offset) { _tempOffset = offset; };
|
|
|
|
int getHumOffsetDecimal() { return _humOffset; };
|
|
|
|
int getTempOffsetDecimal() { return _tempOffset; };
|
|
|
|
|
2022-05-08 07:05:13 -04:00
|
|
|
|
|
|
|
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; };
|
|
|
|
|
2022-05-12 09:07:38 -04:00
|
|
|
// raw data for efficient storage / transport and
|
|
|
|
// to access the decimal part if needed.
|
|
|
|
// decoding depends on type sensor.
|
|
|
|
uint16_t getRawTemperature();
|
|
|
|
uint16_t getRawHumidity();
|
|
|
|
|
2022-05-08 07:05:13 -04:00
|
|
|
|
|
|
|
private:
|
|
|
|
uint8_t _dataPin = 0;
|
|
|
|
uint8_t _wakeupDelay = 0;
|
|
|
|
uint8_t _type = 0;
|
|
|
|
int _humOffset = 0;
|
|
|
|
int _tempOffset = 0;
|
|
|
|
int _humidity = 0;
|
|
|
|
int _temperature = 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 --
|
|
|
|
|