#include <LiquidCrystal_I2C.h>
#include <DHTesp.h>
#define ECHO_PIN 5
#define TRIG_PIN 4
#define Merah 13
#define Kuning 12
#define Hijau 14
const int DHT_PIN = 15;
DHTesp dhtSensor;
LiquidCrystal_I2C lcd(0x27, 16, 2);
// 0x27 adalah alamat lcd.
// 16 adalah jumlah kolom LCD.
// 2 adalah jumlah baris LCD.
float X=400/397.63;
// X adalah faktor konversi karena suara merambat.
void setup() {
lcd.init();
lcd.backlight();
lcd.home();
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(Merah, OUTPUT);
pinMode(Kuning, OUTPUT);
pinMode(Hijau, OUTPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
Serial.begin(115200);
Serial.println("Mulai");
}
void loop() {
// ---------------
// Koneksi Ke LCD
// ---------------
byte error, address;
int nDevices;
nDevices = 0;
for(address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C ditemukan pada 0x");
if (address<16) {
Serial.print("0");
}
Serial.println(address,HEX);
nDevices++;
}
else if (error==4) {
Serial.print("Error tidak diketahui pada 0x");
if (address<16) {
Serial.print("0");
}
Serial.println(address,HEX);
}
}
if (nDevices == 0) {
Serial.println("Tidak ada I2C yang ditemukan\n");
}
else {
Serial.println("Selesai\n");
}
// ------------------------------------------
// Menghitung Jarak Dengan Sensor Ultrasonik
// ------------------------------------------
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Sinyal Ultrasonik
int duration = pulseIn(ECHO_PIN, HIGH);
float convert = duration * 0.034 * X / 2;
// Konversi karena suara merambat sekitar 0,034 cm/mikrodetik.
int distance = round(convert);
// ----------------
// Reset Lampu LED
// ----------------
digitalWrite(Merah, LOW);
digitalWrite(Hijau, LOW);
digitalWrite(Kuning, LOW);
// -----------------------------
// Intensitas Cahaya Sensor LDR
// -----------------------------
// int ldrValue = analogRead(ldrPin);
// Serial.println("Lux: " + String(ldrValue));
// lcd.setCursor(7, 0);
// lcd.print(" "); // untuk reset LCD Lux
// lcd.setCursor(7, 0);
// lcd.print(String(ldrValue) + " Lux");
// -----------------------------
// Sensor DHT
// -----------------------------
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
delay(1000);
Serial.println("Suhu: " + String(data.temperature, 2) + "°C");
lcd.setCursor(7, 0);
lcd.print(" "); // untuk reset LCD Lux
lcd.setCursor(7, 0);
lcd.print(String(data.temperature, 2) + " C");
lcd.setCursor(12, 0);
lcd.print((char)223);
// ------------------------------------
// Membuat Keputusan Berdasarkan jarak
// ------------------------------------
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" CM");
lcd.home();
lcd.print("K4 lCD");
lcd.setCursor(0, 1);
lcd.print(" "); // untuk reset LCD jarak
lcd.setCursor(0, 1);
lcd.print(String(distance) + "cm");
lcd.setCursor(7, 1);
lcd.print(" "); // untuk reset LCD bahaya/awas/aman
lcd.setCursor(7, 1);
if(distance < 30)
{
Serial.println("Merah (Bahaya)");
digitalWrite(Merah, HIGH);
lcd.print(":o Bahaya");
}
else if (distance < 200)
{
Serial.println("Kuning (Awas)");
digitalWrite(Kuning, HIGH);
lcd.print(":| Awas");
}
else
{
Serial.println("Hijau (Aman)");
digitalWrite(Hijau, HIGH);
lcd.print(":) Aman");
}
delay(500);
}