//DHT22温湿度传感器的应用
/*
根据温度和湿度的数据范围,点亮不同的led灯
舒适的温度,绿灯亮,舒适的湿度,蓝灯点亮,否则黄灯点亮
温湿度传感器可以修改默认值
write by future,20220513
*/
#include "DHT.h"
#define DHTPIN 2 //定义连接到传感器的数字引脚
#define DHTTYPE DHT22 //DHT 22 (AM2302)定义传感器类型
DHT dht(DHTPIN, DHTTYPE); //进行初始设置
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); //配置LCD地址及行列
void setup() {
pinMode(4, OUTPUT);
pinMode(8, OUTPUT);
pinMode(12, OUTPUT);
Serial.begin(9600); //设置串口速率
Serial.println("DHT22 test!"); //显示DHT22 test
dht.begin(); //DHT开始工作
lcd.init(); //初始化LCD
lcd.backlight(); //打开背光
lcd.setCursor(0,0); //设置LCD的显示位置0列、0行
lcd.print("Temp:"); //设置LCD静态显示“温度”
lcd.setCursor(13,0); //设置LCD的显示位置13列、0行
lcd.print("C"); //LCD显示摄氏温度单位,用C代替
lcd.setCursor(0,1); //设置LCD的显示位置0列、1行
lcd.print(" Hum:"); //设置LCD静态显示“湿度”
lcd.setCursor(13,1); //设置LCD的显示位置13列、0行
lcd.print("%"); //LCD显示湿度单位,%
}
void loop() {
delay(1000); //两次检测之间,要等几秒钟,这个传感器有点慢。读温度或湿度要用250毫秒
float h = dht.readHumidity(); //读湿度
float t = dht.readTemperature(); //读温度,默认为摄氏度
if(t > 20 && t <= 28){ //若温度在20-28这个区间,绿灯点亮
digitalWrite(4, LOW);
digitalWrite(8, HIGH);
digitalWrite(12, LOW);
delay(100);
}
else if(h > 30 && h <= 80){ //若湿度在30-80这个区间,蓝灯点亮
digitalWrite(4, HIGH);
digitalWrite(8, LOW);
digitalWrite(12, LOW);
delay(100);
}
else{ //不满足以上温度和湿度范围,黄灯点亮
digitalWrite(4, LOW);
digitalWrite(8, LOW);
digitalWrite(12, HIGH);
delay(100);
}
lcd.setCursor(6, 0); //设置LCD的显示位置6列、0行
lcd.print(t,2); //LCD显示摄氏温度值,保留小数点后2位
lcd.setCursor(6, 1); //设置LCD的显示位置6列、0行
lcd.print(h); //LCD显示摄氏温度值
Serial.print("Temp: "); //串口显示温度的名称简写Temp
Serial.print(t); //串口显示温度值
Serial.print("°C, Hum:"); //串口显示温度单位
Serial.print(h); //串口显示湿度值
Serial.println("%"); //串口显示湿度单位
}