#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// --- PHẦN GIẢ LẬP MBED (Wrapper) ---
// Class này giúp bạn dùng các hàm giống hệt như đang code Mbed OS thật
class SystemMonitor {
public:
LiquidCrystal_I2C lcd; // Đối tượng màn hình
DHT dht; // Đối tượng cảm biến
// Khởi tạo hệ thống với địa chỉ LCD và chân cảm biến
SystemMonitor(int dht_pin) : lcd(0x27, 16, 2), dht(dht_pin, DHT22) {}
void start() {
lcd.init(); // Khởi động LCD
lcd.backlight(); // Bật đèn nền
dht.begin(); // Khởi động cảm biến
// In lời chào mở đầu
lcd.setCursor(0, 0);
lcd.print("System Ready...");
delay(2000);
lcd.clear();
}
void updateDisplay() {
// 1. Đọc dữ liệu (Bản chất: Giao tiếp One-Wire)
float h = dht.readHumidity();
float t = dht.readTemperature();
// 2. Kiểm tra lỗi (Bản chất: Error Handling trong OS)
if (isnan(h) || isnan(t)) {
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
return;
}
// 3. Hiển thị (Bản chất: Output Stream)
lcd.setCursor(0, 0);
lcd.print("Temp: "); lcd.print(t, 1); lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humid: "); lcd.print(h, 1); lcd.print(" %");
}
};
// --- CHƯƠNG TRÌNH CHÍNH ---
// Khai báo hệ thống với DHT22 nối vào chân D4 (như hình bạn nối)
SystemMonitor mySys(D4);
void setup() {
mySys.start();
}
void loop() {
mySys.updateDisplay();
delay(2000); // Đợi 2 giây để cảm biến lấy mẫu mới
}