#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
const int relayPin = 19;
DHT dht(12, DHT22);
#define LDR_PIN 35
#define SOIL_SENSOR_PIN 34
LiquidCrystal_I2C lcd(0x27, 16, 2); // Khởi tạo LCD với địa chỉ I2C 0x27, 16 cột, 2 hàng
void setup() {
pinMode(LDR_PIN, INPUT);
pinMode(SOIL_SENSOR_PIN, INPUT);
pinMode(relayPin, OUTPUT);
Serial.begin(115200);
lcd.init();
lcd.backlight();
dht.begin();
delay(2000);
}
void loop() {
// Đọc cảm biến đất
int16_t soilValue = analogRead(SOIL_SENSOR_PIN);
int soilPercentage = map(soilValue, 1680, 3620, 0, 100);
// Đọc LDR
int16_t ldrValue = analogRead(LDR_PIN);
int ldrPercentage = map(ldrValue, 0, 4095, 0, 100);
// Đọc DHT22
float t = dht.readTemperature();
float h = dht.readHumidity();
String temp = String(t);
String hum = String(h);
// Xóa màn hình LCD và hiển thị thông tin cảm biến đất
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Soil: ");
lcd.print(soilPercentage);
lcd.print("%");
// Hiển thị thông tin LDR
lcd.setCursor(0, 1);
lcd.print("Light: ");
lcd.print(ldrPercentage);
lcd.print("%");
// Hiển thị thông tin DHT22
lcd.setCursor(11, 0);
lcd.print("T: ");
lcd.print(temp);
lcd.print("C");
lcd.setCursor(11, 1);
lcd.print("H: ");
lcd.print(hum);
lcd.print("%");
// Kiểm tra các giá trị cảm biến và điều khiển đèn LED
if (soilPercentage < 30 && t > 50 ) {
digitalWrite(relayPin, HIGH);
} else{
digitalWrite(relayPin, LOW);
}
delay(1000); // Thời gian trễ để cập nhật LCD mỗi giây
}