#define DHT D4
uint8_t DHTbuf[5];
uint8_t error;
uint8_t readDHT(){
error=false;
pinMode(DHT,OUTPUT);
digitalWrite(DHT, LOW);
delay(2);
digitalWrite(DHT, HIGH);
delayMicroseconds(40);
pinMode(DHT,INPUT_PULLUP);
waitLow();
if(error){ //is sensor pulling low
Serial.println("DHT not present");
return false; //no, so return
}
uint8_t i,j;
waitHigh();
waitLow();
for(i=0;i<5;i++){
for(j=0;j<8;j++){
waitHigh();
delayMicroseconds(40);
DHTbuf[i]<<=1;
if(digitalRead(DHT)==1)
DHTbuf[i]++;
waitLow();
}
}
uint8_t sum = DHTbuf[0] + DHTbuf[1] + DHTbuf[2] + DHTbuf[3];
if (DHTbuf[4] != sum)
return false;
return !error;
}
void waitLow(){
if(error)
return;
uint16_t timeout=2000;
while(digitalRead(DHT)==1 && --timeout>0);
if(timeout>0)
return;
error=true;
}
void waitHigh(){
uint16_t timeout=2000;
if(error)
return;
while(digitalRead(DHT)==0 && --timeout>0);
if(timeout>0)
return;
error=true;
}