#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 2 // Chân kết nối Buzzer
#define BUTTON_PIN 14 // Chân kết nối nút nhấn (D2)
DHT dht(DHT_PIN, DHT_TYPE); // Đối tượng DHT
bool buttonPressed = false; // Trạng thái nút nhấn
// Biến có lưu tắc buzzer khi có cảnh báo
void setup() {
Serial.begin(115200);
pinMode(LDR_PIN, INPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Sử dụng Pull-Up cho nút nhấn
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ị ánh sáng (LDR): %d\n", ldrValue);
// Kiểm tra mức ánh sáng vượt ngưỡng
if (ldrValue >= 2000) { // Ngưỡng ánh sáng là 2000
Serial.println("Cảnh báo: Ánh sáng vượt ngưỡng!");
if (buttonPressed) { // Chỉ bật Buzzer nếu nút nhấn chưa được xử lý
noTone(BUZZER_PIN);
}
else{
tone(BUZZER_PIN,262);
delay(100);
}
} else { // Nếu không vượt ngưỡng
buttonPressed = false;
noTone(BUZZER_PIN);
}
// Kiểm tra trạng thái nút nhấn
if (digitalRead(BUTTON_PIN) == LOW) { // LOW => Nút nhấn được bấm
if (ldrValue >= 2000) {
buttonPressed = !buttonPressed;
Serial.println("Nút nhấn được nhấn: Buzzer tắt.");
}
}
delay(100); // Chu kỳ 0.1 giây
}