Skip to content

Commit 6cd3d87

Browse files
authored
fix pulse timing
1 parent 6bfade2 commit 6cd3d87

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

src/esp32DHT.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -119,34 +119,32 @@ void DHT::_readSensor(DHT* instance) {
119119
if (items) {
120120
instance->_decode(items, rx_size/sizeof(rmt_item32_t));
121121
vRingbufferReturnItem(instance->_ringBuf, static_cast<void*>(items));
122-
rmt_rx_stop(instance->_channel);
123-
pinMode(instance->_pin, OUTPUT);
124-
digitalWrite(instance->_pin, HIGH);
125122
} else {
126123
instance->_status = 1; // timeout error
127-
rmt_rx_stop(instance->_channel);
128-
pinMode(instance->_pin, OUTPUT);
129-
digitalWrite(instance->_pin, HIGH);
130124
}
125+
rmt_rx_stop(instance->_channel);
126+
pinMode(instance->_pin, OUTPUT);
127+
digitalWrite(instance->_pin, HIGH);
131128

132129
// return results
133130
instance->_tryCallback();
134131
}
135132
}
136133

137134
void DHT::_decode(rmt_item32_t* data, int numItems) {
138-
if (numItems < 42) {
135+
uint8_t pulse = data[0].duration0 + data[0].duration1;
136+
if (numItems < 41) {
139137
_status = 5;
140138
} else if (numItems > 42) {
141139
_status = 6;
142-
} else if ((data[0].duration0 + data[0].duration1) < 140 || (data[0].duration0 + data[0].duration1) > 180) {
140+
} else if (pulse < 130 || pulse > 180) {
143141
_status = 2;
144142
} else {
145-
for (uint8_t i = 1; i < numItems - 1; ++i) { // don't include tail
146-
uint8_t pulse = data[i].duration0 + data[i].duration1;
143+
for (uint8_t i = 1; i < 41; ++i) { // don't include tail >40
144+
pulse = data[i].duration0 + data[i].duration1;
147145
if (pulse > 55 && pulse < 145) {
148146
_data[(i - 1) / 8] <<= 1; // shift left
149-
if (pulse > 120) {
147+
if (pulse > 110) {
150148
_data[(i - 1) / 8] |= 1;
151149
}
152150
} else {

0 commit comments

Comments
 (0)