疯狂的蜗牛 发表于 2016-11-14 22:40:54

利用串口监视器显示DHT11温湿度传感器的示数

const int DHpin = 2;

byte dat;
void setup()
{
    pinMode(2, OUTPUT);
    Serial.begin(9600);//设置串行每秒传输数据的速率(9600)
}

void loop()
{
    DHT11_test();
    show_data();
    delay(500);
}

void show_data(){   //从 Arduino 串口监视器观察数据
      
    Serial.print("Humdity: ");
    Serial.print(dat, DEC);
    Serial.print(".");
    Serial.print(dat, DEC);
    Serial.println("%");

    Serial.print("\tTemperature: ");
    Serial.print(dat, DEC);
    Serial.print(".");
    Serial.print(dat, DEC);
    Serial.println(" C");

}

byte DHT11_read(){      //串口通讯,发送8位数据
    byte data = 0;
    for(int i=0; i<8; i++){
      if( digitalRead(DHpin)==LOW ){
            while( digitalRead(DHpin)==LOW );
            delayMicroseconds(30);//高电平>30us为“1”,高电平<30us为“0”
            if( digitalRead(DHpin)==HIGH )
                data |= 1<<(7-i);
            while( digitalRead(DHpin)==HIGH );
      }
    }
    return data;
}

void DHT11_test(){
    digitalWrite(DHpin, LOW); //拉低总线,发开始信号
    delay(30);                //【延时要大于18ms,以便 DHT11 检测开始信号】
    digitalWrite(DHpin, HIGH);   
    delayMicroseconds(40);    //拉高总线,等待 DHT11 响应
      pinMode(DHpin, INPUT); //从 DHT11 中读取温湿度

      while( digitalRead(DHpin)==HIGH );
      delayMicroseconds(80);// DHT11 发出响应,拉低总线80us

      while( digitalRead(DHpin)==LOW );
      delayMicroseconds(80);// DHT11 拉高总线80us后开始发送数据

      for(int i=0; i<4; i++) //接受温湿度数据【前湿度,后温度】
            dat = DHT11_read();

      pinMode(DHpin, OUTPUT);   
    digitalWrite(DHpin, HIGH);//发送完后释放总线,等待下一次开始信号
}

1529835644 发表于 2017-6-1 14:34:02

这个库文件里面有的吧

云中弓 发表于 2017-7-3 14:59:50

大神啊 我也而是按照你步骤读取数据的,但是到了发送8位数据的时候 if( digitalRead(DHpin)==LOW ){
            while( digitalRead(DHpin)==LOW );就在这一步,一直是高电平,根本无法得到数据,这个是为什么啊,难道是我传感器坏了吗?

方恨少 发表于 2018-1-14 18:20:32

没明白,这个有点蒙/
页: [1]
查看完整版本: 利用串口监视器显示DHT11温湿度传感器的示数