#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>

// Định nghĩa chân
#define TRIG_PIN 14
#define ECHO_PIN 12
#define DHT_PIN 4
#define LIGHT_SENSOR_PIN 33
#define LED_PIN 16

// Khởi tạo cảm biến DHT
DHT dht(DHT_PIN, DHT22);

// Khởi tạo màn hình LCD
LiquidCrystal_I2C lcd(0x3F, 16, 2);

void setup() {
  Serial.begin(115200);
  
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);

  // Khởi động cảm biến DHT
  dht.begin();

  // Khởi động màn hình LCD
  lcd.begin(16, 2);
  lcd.print("IOT Quan Ly Rac");
  delay(2000);
}

void loop() {
  // Đo khoảng cách từ cảm biến siêu âm
  long duration, distance;
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  
  duration = pulseIn(ECHO_PIN, HIGH);
  distance = (duration / 2) / 29.1;

  // Đo nhiệt độ và độ ẩm từ DHT22
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  // Đọc cường độ ánh sáng
  int lightLevel = analogRead(LIGHT_SENSOR_PIN);

  // Hiển thị thông tin trên màn hình LCD
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Rac: ");
  lcd.print(distance);
  lcd.print(" cm");

  lcd.setCursor(0, 1);
  lcd.print("T: ");
  lcd.print(temperature);
  lcd.print("C H: ");
  lcd.print(humidity);
  lcd.print("%");

  // Nếu thùng rác đầy (khoảng cách < 10 cm), bật LED đỏ
  if (distance < 10) {
    digitalWrite(LED_PIN, HIGH); // Bật LED
  } else {
    digitalWrite(LED_PIN, LOW); // Tắt LED
  }

  delay(2000);
}
$abcdeabcde151015202530fghijfghij