#include "DHT.h"
#define DHTPIN 27 // Chân kết nối với DATA của DHT22
#define DHTTYPE DHT22 // Sử dụng cảm biến DHT22
#define LED_PIN 4 // Chân kết nối với LED (đại diện quạt)
#define BUTTON_PIN 14 // Chân kết nối với nút nhấn
DHT dht(DHTPIN, DHTTYPE);
float threshold = 28.0; // Ngưỡng nhiệt độ
bool fanState = false; // Trạng thái quạt
void setup() {
Serial.begin(115200);
Serial.println(F("DHT22 with Fan Control!"));
dht.begin(); // Khởi động cảm biến DHT
pinMode(LED_PIN, OUTPUT); // Cấu hình chân LED là OUTPUT
pinMode(BUTTON_PIN, INPUT_PULLUP); // Nút nhấn có chế độ kéo lên
digitalWrite(LED_PIN, LOW); // Tắt LED lúc đầu
}
void loop() {
// Đọc nhiệt độ từ cảm biến DHT22
float t = dht.readTemperature();
// Kiểm tra xem có lỗi khi đọc dữ liệu hay không
if (isnan(t)) {
Serial.println(F("Lỗi! Không thể đọc dữ liệu từ cảm biến DHT"));
return;
}
// Kiểm tra nhiệt độ để bật/tắt quạt (LED)
if (t > threshold && !fanState) {
digitalWrite(LED_PIN, HIGH); // Bật quạt (LED)
fanState = true;
Serial.println("Quạt: Bật");
} else if (t <= threshold && fanState) {
digitalWrite(LED_PIN, LOW); // Tắt quạt (LED)
fanState = false;
Serial.println("Quạt: Tắt");
}
// Hiển thị nhiệt độ và ngưỡng hiện tại
Serial.print(F("Nhiệt độ hiện tại: "));
Serial.print(t);
Serial.println(F("°C"));
Serial.print(F("Ngưỡng hiện tại: "));
Serial.println(threshold);
// Kiểm tra nút nhấn để thay đổi ngưỡng nhiệt độ
if (digitalRead(BUTTON_PIN) == LOW) {
delay(500); // Debounce
threshold += 1.0; // Tăng ngưỡng lên 1°C mỗi lần nhấn nút
Serial.print(F("Ngưỡng nhiệt độ mới: "));
Serial.println(threshold);
}
delay(2000); // Chờ 2 giây trước khi đọc lần tiếp theo
}