5 Commits
1.3.2 ... 1.3.3

3 changed files with 28 additions and 8 deletions

18
DHT.cpp
View File

@ -22,7 +22,9 @@ DHT::DHT(uint8_t pin, uint8_t type, uint8_t count) {
// based on the speed of the processor. // based on the speed of the processor.
} }
void DHT::begin(void) { // Optionally pass pull-up time (in microseconds) before DHT reading starts.
// Default is 55 (see function declaration in DHT.h).
void DHT::begin(uint8_t usec) {
// set up the pins! // set up the pins!
pinMode(_pin, INPUT_PULLUP); pinMode(_pin, INPUT_PULLUP);
// Using this value makes sure that millis() - lastreadtime will be // Using this value makes sure that millis() - lastreadtime will be
@ -30,6 +32,7 @@ void DHT::begin(void) {
// but so will the subtraction. // but so will the subtraction.
_lastreadtime = millis() - MIN_INTERVAL; _lastreadtime = millis() - MIN_INTERVAL;
DEBUG_PRINT("DHT max clock cycles: "); DEBUG_PRINTLN(_maxcycles, DEC); DEBUG_PRINT("DHT max clock cycles: "); DEBUG_PRINTLN(_maxcycles, DEC);
pullTime = usec;
} }
//boolean S == Scale. True == Fahrenheit; False == Celcius //boolean S == Scale. True == Fahrenheit; False == Celcius
@ -39,6 +42,15 @@ float DHT::readTemperature(bool S, bool force) {
if (read(force)) { if (read(force)) {
switch (_type) { switch (_type) {
case DHT11: case DHT11:
f = data[2];
if (data[3] & 0x80) {
f = -1 - f ;
}
f += (data[3] & 0x0f) * 0.1;
if(S) {
f = convertCtoF(f);
}
break;
case DHT12: case DHT12:
f = data[2]; f = data[2];
f += (data[3] & 0x0f) * 0.1; f += (data[3] & 0x0f) * 0.1;
@ -170,8 +182,10 @@ bool DHT::read(bool force) {
// End the start signal by setting data line high for 40 microseconds. // End the start signal by setting data line high for 40 microseconds.
pinMode(_pin, INPUT_PULLUP); pinMode(_pin, INPUT_PULLUP);
// Delay a moment to let sensor pull data line low.
delayMicroseconds(pullTime);
// Now start reading the data line to get the value from the DHT sensor. // Now start reading the data line to get the value from the DHT sensor.
delayMicroseconds(40); // Delay a bit to let sensor pull data line low.
// Turn off interrupts temporarily because the next sections // Turn off interrupts temporarily because the next sections
// are timing critical and we don't want any interruptions. // are timing critical and we don't want any interruptions.

10
DHT.h
View File

@ -39,7 +39,7 @@ written by Adafruit Industries
class DHT { class DHT {
public: public:
DHT(uint8_t pin, uint8_t type, uint8_t count=6); DHT(uint8_t pin, uint8_t type, uint8_t count=6);
void begin(void); void begin(uint8_t usec=55);
float readTemperature(bool S=false, bool force=false); float readTemperature(bool S=false, bool force=false);
float convertCtoF(float); float convertCtoF(float);
float convertFtoC(float); float convertFtoC(float);
@ -58,6 +58,7 @@ class DHT {
#endif #endif
uint32_t _lastreadtime, _maxcycles; uint32_t _lastreadtime, _maxcycles;
bool _lastresult; bool _lastresult;
uint8_t pullTime; // Time (in usec) to pull up data line before reading
uint32_t expectPulse(bool level); uint32_t expectPulse(bool level);
@ -66,6 +67,9 @@ class DHT {
class InterruptLock { class InterruptLock {
public: public:
InterruptLock() { InterruptLock() {
#if defined(ESP8266)
yield();
#endif
#if !defined(ARDUINO_ARCH_NRF52) #if !defined(ARDUINO_ARCH_NRF52)
noInterrupts(); noInterrupts();
#endif #endif
@ -73,9 +77,11 @@ class InterruptLock {
~InterruptLock() { ~InterruptLock() {
#if !defined(ARDUINO_ARCH_NRF52) #if !defined(ARDUINO_ARCH_NRF52)
interrupts(); interrupts();
#endif
#if defined(ESP8266)
yield();
#endif #endif
} }
}; };
#endif #endif

View File

@ -1,5 +1,5 @@
name=DHT sensor library name=DHT sensor library
version=1.3.2 version=1.3.3
author=Adafruit author=Adafruit
maintainer=Adafruit <info@adafruit.com> maintainer=Adafruit <info@adafruit.com>
sentence=Arduino library for DHT11, DHT22, etc Temp & Humidity Sensors sentence=Arduino library for DHT11, DHT22, etc Temp & Humidity Sensors