| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #ifndef DHT_H
- #define DHT_H
- #if ARDUINO >= 100
- #include "Arduino.h"
- #else
- #include "WProgram.h"
- #endif
- #include <Wire.h>
- // 8 MHz(ish) AVR ---------------------------------------------------------
- #if (F_CPU >= 7400000UL) && (F_CPU <= 9500000UL)
- #define COUNT 1
- // 16 MHz(ish) AVR --------------------------------------------------------
- #elif (F_CPU == 10000000L)
- #define COUNT 1
- #elif (F_CPU >= 15400000UL) && (F_CPU <= 19000000L)
- #define COUNT 2
- #elif (F_CPU == 20000000L)
- #define COUNT 2
- #elif (F_CPU == 40000000L)
- #define COUNT 4
- // 48MHz SAMD21J18A (Sodaq Explorer)
- #elif (F_CPU == 48000000UL)
- #define COUNT 5
- // 64MHz NRF52840
- #elif (F_CPU == 64000000UL)
- #define COUNT 6
- // 168MHz STM32F405 STM32F407
- #elif (F_CPU == 168000000L)
- #define COUNT 16
- #elif (F_CPU == 80000000L)
- #define COUNT 8
- #elif (F_CPU == 160000000L)
- #define COUNT 16
- #else
- #define COUNT 24
- //#error "CPU SPEED NOT SUPPORTED"
- #endif
- //RP2040
- #if defined(ARDUINO_ARCH_RP2040)
- #undef COUNT
- #define COUNT 10
- #endif
- /* DHT library
- MIT license
- written by Adafruit Industries
- */
- // how many timing transitions we need to keep track of. 2 * number bits + extra
- #define MAXTIMINGS 85
- #define SERIALPRINT Serial
- #define DEFAULT_IIC_ADDR 0x38
- #define RESET_REG_ADDR 0xba
- #define HUMIDITY_INDEX 0
- #define TEMPRATURE_INDEX 1
- #define DHT11 11
- #define DHT22 22
- #define DHT21 21
- #define AM2301 21
- #define DHT10 10
- #define DHT20 10
- class DHT {
- private:
- uint8_t data[6];
- uint8_t _pin, _type, _count;
- boolean read(void);
- unsigned long _lastreadtime;
- boolean firstreading;
- public:
- DHT(uint8_t pin, uint8_t type, uint8_t count = COUNT);
- DHT(uint8_t type);
- void begin(void);
- float readTemperature(bool S = false);
- float convertCtoF(float);
- float readHumidity(void);
- /** Common interface to get temp&humi value.support all DHT device.
- @return 0 for calibrated failed,1 for succeed.
- **/
- int readTempAndHumidity(float* data);
- // DHT10 digital interfaces(i2c),onlu for DHT10 .
- int i2cReadByte(uint8_t& byte);
- int i2cReadBytes(uint8_t* bytes, uint32_t len);
- int i2cWriteBytes(uint8_t* bytes, uint32_t len);
- int i2cWriteByte(uint8_t byte);
- /** Reset sensor.
- @return 0 for calibrated failed,1 for succeed.
- **/
- int DHT10Reset(void);
- /** Read status register.check the calibration flag - bit[3]: 1- calibrated ok ,0 - Not calibrated.
- @return 0 for calibrated failed,1 for succeed.
- **/
- int DHT10ReadStatus(void);
- /** Init sensor,send 0x08,0x00 to register 0xe1.
- @ return : 0 if success, non-zero if failed.
- **/
- int setSystemCfg(void);
- /** Read temp & humi result buf from sensor.
- total 6 bytes,the first byte for status register,other 5 bytes for temp & humidity data.
- @ return : 0 if success, non-zero if failed.
- **/
- int readTargetData(uint32_t* data);
- /** DHT10 Init function.
- Reset sensor and wait for calibration complete.
- @ return : 0 if success, non-zero if failed.
- **/
- int DHT10Init(void);
- };
- #endif
|