#include <DHT.h>
// 硬件配置
#define DHTPIN 4 // DHT22数据引脚
#define BUTTON_PIN 18 // 按钮引脚
#define DHTTYPE DHT22 // 传感器类型
// 全局变量
DHT dht(DHTPIN, DHTTYPE);
unsigned long buttonPressTime = 0;
bool buttonActive = false;
void setup() {
Serial.begin(115200);
pinMode(BUTTON_PIN, INPUT_PULLUP); // 启用内部上拉电阻
dht.begin();
Serial.println("系统就绪:\n短按(<1s)显示温度\n长按(≥1s)显示湿度");
}
void loop() {
// 检测按钮按下(低电平触发)
if(digitalRead(BUTTON_PIN) == LOW) {
if(!buttonActive) {
buttonPressTime = millis(); // 记录按下时间
buttonActive = true;
delay(50); // 硬件防抖
}
} else {
if(buttonActive) {
// 计算按压时长
unsigned long pressDuration = millis() - buttonPressTime;
// 读取传感器数据
float temp = dht.readTemperature();
float humi = dht.readHumidity();
// 判断短按/长按
if(pressDuration < 1000) { // 短按显示温度
if(!isnan(temp)) {
Serial.print("温度: ");
Serial.print(temp);
Serial.println(" °C");
}
} else { // 长按显示湿度
if(!isnan(humi)) {
Serial.print("湿度: ");
Serial.print(humi);
Serial.println(" %");
}
}
buttonActive = false;
}
}
// DHT22要求最小2秒读取间隔
static unsigned long lastReadTime = 0;
if(millis() - lastReadTime > 2000) {
dht.readTemperature(); // 维持传感器工作
lastReadTime = millis();
}
}