@@ -119,34 +119,32 @@ void DHT::_readSensor(DHT* instance) {
119
119
if (items) {
120
120
instance->_decode (items, rx_size/sizeof (rmt_item32_t ));
121
121
vRingbufferReturnItem (instance->_ringBuf , static_cast <void *>(items));
122
- rmt_rx_stop (instance->_channel );
123
- pinMode (instance->_pin , OUTPUT);
124
- digitalWrite (instance->_pin , HIGH);
125
122
} else {
126
123
instance->_status = 1 ; // timeout error
127
- rmt_rx_stop (instance->_channel );
128
- pinMode (instance->_pin , OUTPUT);
129
- digitalWrite (instance->_pin , HIGH);
130
124
}
125
+ rmt_rx_stop (instance->_channel );
126
+ pinMode (instance->_pin , OUTPUT);
127
+ digitalWrite (instance->_pin , HIGH);
131
128
132
129
// return results
133
130
instance->_tryCallback ();
134
131
}
135
132
}
136
133
137
134
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 ) {
139
137
_status = 5 ;
140
138
} else if (numItems > 42 ) {
141
139
_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 ) {
143
141
_status = 2 ;
144
142
} 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 ;
147
145
if (pulse > 55 && pulse < 145 ) {
148
146
_data[(i - 1 ) / 8 ] <<= 1 ; // shift left
149
- if (pulse > 120 ) {
147
+ if (pulse > 110 ) {
150
148
_data[(i - 1 ) / 8 ] |= 1 ;
151
149
}
152
150
} else {
0 commit comments