#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <NewPing.h>
// Konfigurasi pin
#define DHTPIN 2 // Pin data DHT22 terhubung ke D2
#define DHTTYPE DHT22 // Menggunakan tipe sensor DHT22
#define TRIG_PIN 9 // Pin Trig HC-SR04
#define ECHO_PIN 10 // Pin Echo HC-SR04
#define MAX_DISTANCE 200 // Maksimum jarak HC-SR04 (dalam cm)
// Inisialisasi objek untuk sensor
DHT dht(DHTPIN, DHTTYPE);
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
// Inisialisasi LCD I2C (Alamat I2C biasanya 0x27 atau 0x3F)
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Memulai komunikasi serial (untuk debugging)
Serial.begin(9600);
// Memulai sensor DHT
dht.begin();
// Memulai LCD
lcd.init();
lcd.backlight();
// Menampilkan intro di LCD
lcd.setCursor(0, 0);
lcd.print("Kelompok C1");
lcd.setCursor(0, 1);
lcd.print("Fakhri H");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ezsly Y");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alvito Gilang");
delay(2000);
lcd.clear();
}
void loop() {
// Membaca suhu dari DHT22
float suhu = dht.readTemperature(); // Dalam Celcius
float humidity = dht.readHumidity(); // Membaca kelembaban
// Cek apakah pembacaan dari DHT berhasil
if (isnan(suhu) || isnan(humidity)) {
lcd.setCursor(0, 0);
lcd.print("Sensor Error");
Serial.println("Gagal membaca data dari DHT22");
} else {
// Membaca jarak dari HC-SR04
unsigned int jarak = sonar.ping_cm(); // Dalam cm
// Tampilkan hasil di LCD
lcd.setCursor(0, 0);
lcd.print("Suhu : ");
lcd.print(suhu);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Jarak: ");
if (jarak == 0) {
lcd.print("> ");
lcd.print(MAX_DISTANCE);
lcd.print(" cm"); // Tampilkan > jika jarak lebih dari sensor max
} else {
lcd.print(jarak);
lcd.print(" cm");
}
// Debug ke serial monitor
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print(" C, Jarak: ");
Serial.print(jarak);
Serial.println(" cm");
}
delay(3000); // Tunda selama 3 detik sebelum refresh
}