这篇文章距离最后更新已过251 天,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
前引
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;
}
|
暂无评论