Vary delay by sensor type a la PR #70

This commit is contained in:
Phillip Burgess 2019-01-11 17:24:16 -08:00
parent 261e997a90
commit 01490aa8de

24
DHT.cpp
View File

@ -148,27 +148,35 @@ bool DHT::read(bool force) {
// Go into high impedence state to let pull-up raise data line level and // Go into high impedence state to let pull-up raise data line level and
// start the reading process. // start the reading process.
digitalWrite(_pin, HIGH); pinMode(_pin, INPUT_PULLUP);
delay(1); delay(1);
// First set data line low for 1 millisecond. // First set data line low for a period according to sensor type
pinMode(_pin, OUTPUT); pinMode(_pin, OUTPUT);
digitalWrite(_pin, LOW); digitalWrite(_pin, LOW);
delay(1); switch(_type) {
case DHT22:
case DHT21:
delayMicroseconds(1100); // data sheet says "at least 1ms"
break;
case DHT11:
default:
delay(20); //data sheet says at least 18ms, 20ms just to be safe
break;
}
uint32_t cycles[80]; uint32_t cycles[80];
{ {
// Turn off interrupts temporarily because the next sections are timing critical
// and we don't want any interruptions.
InterruptLock lock;
// End the start signal by setting data line high for 40 microseconds. // End the start signal by setting data line high for 40 microseconds.
digitalWrite(_pin, HIGH);
pinMode(_pin, INPUT_PULLUP); pinMode(_pin, INPUT_PULLUP);
// 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(60); // Delay a bit to let sensor pull data line low. delayMicroseconds(60); // Delay a bit to let sensor pull data line low.
// Turn off interrupts temporarily because the next sections
// are timing critical and we don't want any interruptions.
InterruptLock lock;
// First expect a low signal for ~80 microseconds followed by a high signal // First expect a low signal for ~80 microseconds followed by a high signal
// for ~80 microseconds again. // for ~80 microseconds again.
if (expectPulse(LOW) == TIMEOUT) { if (expectPulse(LOW) == TIMEOUT) {