@@ -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
137134void 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