利用串口监视器显示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);//发送完后释放总线,等待下一次开始信号
} 这个库文件里面有的吧 大神啊 我也而是按照你步骤读取数据的,但是到了发送8位数据的时候 if( digitalRead(DHpin)==LOW ){
while( digitalRead(DHpin)==LOW );就在这一步,一直是高电平,根本无法得到数据,这个是为什么啊,难道是我传感器坏了吗? 没明白,这个有点蒙/
页:
[1]