#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD: alamat 0x27, ukuran 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pin switch level
#define LOW_PIN 2
#define MID_PIN 3
#define HIGH_PIN 4
// Relay dan buzzer
#define RELAY_PIN 7
#define BUZZER_PIN 6
bool pumpOn = true; // Status pompa ON di awal
void setup() {
pinMode(LOW_PIN, INPUT_PULLUP);
pinMode(MID_PIN, INPUT_PULLUP);
pinMode(HIGH_PIN, INPUT_PULLUP);
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Pompa ON saat awal (relay aktif high)
digitalWrite(RELAY_PIN, HIGH);
digitalWrite(BUZZER_PIN, LOW);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Water Level");
lcd.setCursor(0, 1);
lcd.print("Monitoring...");
delay(2000);
lcd.clear();
Serial.begin(9600);
}
void loop() {
bool lowLevel = digitalRead(LOW_PIN) == LOW;
bool midLevel = digitalRead(MID_PIN) == LOW;
bool highLevel = digitalRead(HIGH_PIN) == LOW;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Level Air:");
if (highLevel) {
lcd.setCursor(0, 1);
lcd.print("TINGGI (FULL)");
pumpOn = false; // Matikan pompa
digitalWrite(RELAY_PIN, LOW); // Relay OFF
digitalWrite(BUZZER_PIN, HIGH); // Buzzer ON
}
else if (lowLevel) {
lcd.setCursor(0, 1);
lcd.print("RENDAH (ISI)");
pumpOn = true; // Hidupkan pompa
digitalWrite(RELAY_PIN, LOW); // Relay ON
digitalWrite(BUZZER_PIN, LOW); // Buzzer OFF
}
else if (midLevel) {
lcd.setCursor(0, 1);
lcd.print("SEDANG"); // Menampilkan "SEDANG" di LCD
// Tidak ubah status pompa
digitalWrite(BUZZER_PIN, LOW);
}
else {
lcd.setCursor(0, 1);
lcd.print("TIDAK TERDETEKSI");
pumpOn = false;
digitalWrite(RELAY_PIN, HIGH);
digitalWrite(BUZZER_PIN, LOW);
}
delay(1000);
}