这篇文章距离最后更新已过179 天,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
前引
Arduino中已经有关于DHT11的库,但是为了理解模块的运行原理,而写了这个代码,代码中的不足之处还请多多指正。
关于DHT11的原理,在之前的文章中已经提到过,就不再赘述。
代码部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
#define DHT11 15 void setup() { Serial.begin(115200);
}
void loop() { dht(); delay(2000); }
void dht(){ double hum,tem; pinMode(DHT11,OUTPUT); digitalWrite(DHT11,HIGH); delay(2); digitalWrite(DHT11,LOW); delay(25); digitalWrite(DHT11,HIGH); delayMicroseconds(30); pinMode(DHT11,INPUT); if(!digitalRead(DHT11)){ Serial.println("ok"); while(!digitalRead(DHT11)); delayMicroseconds(10); while(digitalRead(DHT11)); int humInt=getData(); int humDec=getData(); int temInt=getData(); int temDec=getData(); int Check=getData(); if((humInt+humDec+temInt+temDec)==Check){ if(humDec<10){ hum=humInt+humDec/10.0; }else if(humDec<100){ hum=humInt+humDec/100.0; } if(temDec<10){ tem=temInt+temDec/10.0; }else if(temDec<100){ tem=temInt+temDec/100.0; } Serial.print("温度:"); Serial.print(tem); Serial.println(); Serial.print("湿度:"); Serial.print(hum); Serial.println(); } } else{ Serial.println("error"); }
}
int getData(){ byte Data; byte temp; for(int i=0 ;i<8;i++){ while(!digitalRead(DHT11)); delayMicroseconds(35); if(digitalRead(DHT11)){ temp=0x01; }else{ temp=0x00; } Data<<=1; Data|=temp; while(digitalRead(DHT11)); delayMicroseconds(10); } return Data; }
|