#include <DHT.h>
#define DHT_PIN 15 // Chân kết nối DHT22
#define DHT_TYPE DHT22 // Loại cảm biến DHT22
#define LDR_PIN 36 // Chân A0 (VP) của LDR
#define BUZZER_PIN 12 // Chân kết nối Buzzer
#define BUTTON_PIN 2 // Chân kết nối nút nhấn (D2)
DHT dht(DHT_PIN, DHT_TYPE); // Đối tượng DHT
bool buzzerState = false; // Trạng thái Buzzer
bool buttonPressed = false; // Trạng thái nút nhấn
void setup() {
Serial.begin(115200);
pinMode(LDR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Sử dụng Pull-Up cho nút nhấn
digitalWrite(BUZZER_PIN, LOW); // Tắt Buzzer ban đầu
dht.begin(); // Khởi động cảm biến DHT22
Serial.println("Hệ thống bắt đầu...");
}
void loop() {
// Đọc dữ liệu từ DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Không thể đọc từ cảm biến DHT22!");
} else {
Serial.printf("Nhiệt độ: %.2f °C, Độ ẩm: %.2f %%\n", temperature, humidity);
}
// Đọc giá trị từ LDR
int ldrValue = analogRead(LDR_PIN);
Serial.printf("Giá trị bụi (LDR): %d\n", ldrValue);
// Kiểm tra mức bụi cao
if (ldrValue >= 2000) { // Ngưỡng bụi cao là 500
if (!buzzerState) {
buzzerState = true;
Serial.println("Cảnh báo: Ánh sáng vượt ngưỡng! Buzzer bật.");
}
}
// Nếu buzzer đang bật, tạo âm thanh "tút tút"
if (buzzerState) {
for (int i = 0; i < 100; i++) { // Lặp lại để tạo âm thanh liên tục
digitalWrite(BUZZER_PIN, HIGH); // Bật
delay(1); // Trễ ngắn (1ms)
digitalWrite(BUZZER_PIN, LOW); // Tắt
delay(1); // Trễ ngắn (1ms)
}
}
// Kiểm tra trạng thái nút nhấn
if (digitalRead(BUTTON_PIN) == LOW) { // Nút nhấn được bấm
if (buzzerState) {
buzzerState = false;
digitalWrite(BUZZER_PIN, LOW); // Tắt Buzzer
Serial.println("Nút nhấn được nhấn: Buzzer tắt.");
}
}
delay(500); // Chu kỳ 0.5 giây
}