#include <DHT.h>
// Định nghĩa chân kết nối
#define LED_RED_PIN 16 // LED đỏ kết nối với GPIO 16
#define LED_YELLOW_PIN 12 // LED vàng kết nối với GPIO 12
#define LED_GREEN_PIN 13 // LED xanh kết nối với GPIO 13
#define BUTTON_PIN 5 // Nút bấm kết nối với GPIO 5
#define DHT_PIN 15 // DHT22 SDA kết nối với GPIO 15
// Khai báo đối tượng DHT
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
// Các biến để theo dõi trạng thái
bool mode = false; // Chế độ false = Đo nhiệt độ, true = Đo độ ẩm
unsigned long lastButtonPress = 0;
unsigned long debounceDelay = 200; // Delay chống nhiễu cho nút bấm
void setup() {
// Khởi tạo Serial monitor để theo dõi giá trị
Serial.begin(115200);
// Cấu hình các chân
pinMode(LED_RED_PIN, OUTPUT);
pinMode(LED_YELLOW_PIN, OUTPUT);
pinMode(LED_GREEN_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Nút ấn nhả với chế độ INPUT_PULLUP
// Khởi tạo DHT22
dht.begin();
}
void loop() {
// Kiểm tra trạng thái nút bấm (chống nhiễu)
if (digitalRead(BUTTON_PIN) == LOW && (millis() - lastButtonPress) > debounceDelay) {
mode = !mode; // Đổi chế độ
lastButtonPress = millis(); // Cập nhật thời gian nhấn nút
if (mode) {
Serial.println("Chế độ đo độ ẩm");
} else {
Serial.println("Chế độ đo nhiệt độ");
}
}
// Đọc dữ liệu từ DHT22 (Nhiệt độ và Độ ẩm)
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Kiểm tra xem dữ liệu từ DHT22 có hợp lệ không
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Hiển thị nhiệt độ và độ ẩm trên Serial Monitor
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C");
Serial.print(" Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// Kiểm tra chế độ: đo nhiệt độ hay độ ẩm
if (mode == false) {
// Câu 1: Điều khiển LED dựa trên nhiệt độ (Sử dụng if-else)
if (temperature >= 25) {
digitalWrite(LED_RED_PIN, HIGH); // LED đỏ sáng
digitalWrite(LED_YELLOW_PIN, LOW); // LED vàng tắt
digitalWrite(LED_GREEN_PIN, LOW); // LED xanh tắt
} else if (temperature >= 23 && temperature <= 24) {
digitalWrite(LED_RED_PIN, LOW); // LED đỏ tắt
digitalWrite(LED_YELLOW_PIN, LOW); // LED vàng tắt
digitalWrite(LED_GREEN_PIN, HIGH); // LED xanh sáng
} else {
digitalWrite(LED_RED_PIN, LOW); // LED đỏ tắt
digitalWrite(LED_YELLOW_PIN, HIGH); // LED vàng sáng
digitalWrite(LED_GREEN_PIN, LOW); // LED xanh tắt
}
} else {
// Câu 2: Điều khiển LED dựa trên độ ẩm (Sử dụng if-else)
if (humidity > 50) {
digitalWrite(LED_RED_PIN, HIGH); // LED đỏ sáng
digitalWrite(LED_YELLOW_PIN, LOW); // LED vàng tắt
digitalWrite(LED_GREEN_PIN, LOW); // LED xanh tắt
} else if (humidity <= 50 && humidity >= 30) {
digitalWrite(LED_RED_PIN, LOW); // LED đỏ tắt
digitalWrite(LED_YELLOW_PIN, HIGH); // LED vàng sáng
digitalWrite(LED_GREEN_PIN, LOW); // LED xanh tắt
} else {
digitalWrite(LED_RED_PIN, LOW); // LED đỏ tắt
digitalWrite(LED_YELLOW_PIN, LOW); // LED vàng tắt
digitalWrite(LED_GREEN_PIN, HIGH); // LED xanh sáng
}
}
// Đợi một thời gian ngắn trước khi đọc lại
delay(2000); // Đọc lại mỗi 2 giây
}