#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Pin untuk DHT22
#define DHTPIN 2
#define DHTTYPE DHT22
// Pin LED
#define LED_MERAH 8
#define LED_HIJAU 7
// Pin Ultrasonik HC-SR04
#define TRIG_PIN 3
#define ECHO_PIN 4
// Inisialisasi DHT22
DHT dht(DHTPIN, DHTTYPE);
// Inisialisasi LCD 20x2
LiquidCrystal_I2C lcd(0x27, 20, 2);
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
pinMode(LED_MERAH, OUTPUT);
pinMode(LED_HIJAU, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
lcd.setCursor(0, 0);
lcd.print("Weather Monitor");
delay(2000);
lcd.clear();
}
void loop() {
// ====== BACA SENSOR DHT22 ======
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
return;
}
// ====== BACA SENSOR ULTRASONIK ======
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2; // cm
// ====== TAMPILKAN DATA CUACA DI BARIS 1 ======
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperature, 1);
lcd.print("C H:");
lcd.print(humidity, 0);
lcd.print("% "); // spasi untuk hapus sisa char lama
// ====== CEK KETINGGIAN POHON (BARIS 2) ======
lcd.setCursor(0, 1);
if (distance >= 200) {
lcd.print("Time to Cut Tree"); // 20 char, isi spasi agar bersih
digitalWrite(LED_MERAH, HIGH); // alarm nyala
digitalWrite(LED_HIJAU, LOW);
} else {
lcd.print("TreeDist OK: ");
lcd.print(distance, 0);
lcd.print("cm "); // hapus sisa char
digitalWrite(LED_MERAH, LOW);
digitalWrite(LED_HIJAU, HIGH);
}
delay(2000);
}