#include <DHT.h>
// 传感器引脚
#define MQ2_DIGITAL_PIN PA0
#define MQ2_ANALOG_PIN PA1
#define DHT22_PIN PB7 // 根据电路图,DHT22数据引脚连接到PB7
// LED引脚
#define GREEN_LED_PIN PB0
#define YELLOW_LED_PIN PB1
#define RED_LED_PIN PB2
// 阈值
#define LOW_THRESHOLD 650
#define HIGH_THRESHOLD 950
// DHT22传感器
DHT dht(DHT22_PIN, DHT22);
// 温湿度变量
float temperature = 0;
float humidity = 0;
unsigned long lastDHTRead = 0;
void setup() {
Serial.begin(115200);
// 设置引脚
pinMode(MQ2_DIGITAL_PIN, INPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(YELLOW_LED_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
// 初始化DHT传感器
dht.begin();
Serial.println("气体和温湿度传感器启动");
Serial.println("========================");
delay(2000); // 给传感器启动时间
}
void loop() {
// 读取气体传感器
int gasDigital = digitalRead(MQ2_DIGITAL_PIN);
int gasAnalog = analogRead(MQ2_ANALOG_PIN);
// 每2秒读取一次温湿度
if (millis() - lastDHTRead > 2000) {
// 读取温湿度
float h = dht.readHumidity();
float t = dht.readTemperature();
// 检查读数是否有效
if (isnan(h) || isnan(t)) {
Serial.println("DHT22读取失败! 检查连接");
} else {
humidity = h;
temperature = t;
}
lastDHTRead = millis();
}
// 控制LED
if (gasAnalog < LOW_THRESHOLD) {
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(RED_LED_PIN, LOW);
} else if (gasAnalog < HIGH_THRESHOLD) {
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, HIGH);
digitalWrite(RED_LED_PIN, LOW);
} else {
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(RED_LED_PIN, HIGH);
}
// 串口输出
Serial.print("气体: ");
Serial.print(gasAnalog);
// 气体状态指示
if (gasAnalog < LOW_THRESHOLD) {
Serial.print(" (安全)");
} else if (gasAnalog < HIGH_THRESHOLD) {
Serial.print(" (警告)");
} else {
Serial.print(" (危险)");
}
Serial.print(" | 温度: ");
Serial.print(temperature, 1);
Serial.print("°C");
Serial.print(" | 湿度: ");
Serial.print(humidity, 1);
Serial.println("%");
delay(1000);
}