20141116 【 Arduino - DHT11 】 温湿度传感器DHT11使用

之前玩温度传感器LM35是3个引脚的(数据端是模拟引脚);

结果这次一看温湿度传感器DHT11就吓尿了,居然是3个引脚的(数据端是数字引脚),

这怎么输出温度和湿度啊???(数字引脚只有0和1两种值)



后来查了一下元件手册,才知道它是串口通信的(发送连续的01串,表示数值)。

那么接下来就是 串口通信规则了【我没查它的规则,直接模仿源代码得来的】


这次具体的数值只能通过 Arduino 的串口监视器才看得到,

这次就没有用四位八段数码管显示了(上一篇博客有四位八段数码管显示LM35的温度,这里就不重复了)。







其实显示数值本来想使用 12232 的蓝底液晶屏显示的,

可是我的 12232 被“黑心”的厂商用 I2C 总线封装上了(16个引脚的,封装后剩下4个)。


I2C 总线串口通信规则可麻烦了,都已经封装成头文件的,现在还没读懂。。

下次弄懂 I2C 总线串口通讯的规则,以后显示什么数值就用 液晶屏显示。

【因为四维八段数码管需要10个引脚,还要串联8个200+Ω的电阻,每次用都超级麻烦】





const int DHpin = 2;

byte dat[4];
void setup()
{
	pinMode(DHpin, OUTPUT);
	Serial.begin(9600);
}

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

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

	Serial.print("\tTemperature: ");
	Serial.print(dat[2], DEC);
	Serial.print(".");
	Serial.print(dat[3], 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[i] = DHT11_read();

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


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值