#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, 20, 4); // Set screen size to 20x4
int Titik_A_PUMP_1 = 4;
int Titik_B_PUMP_2 = 5;
void setup() {
rtc.begin();
lcd.begin(20, 4); // Set screen size to 20x4
lcd.backlight();
pinMode(Titik_A_PUMP_1, OUTPUT);
pinMode(Titik_B_PUMP_2, OUTPUT);
rtc.adjust(DateTime(2024, 12, 22, 9, 8, 55));
}
void loop() {
static boolean showTime = true;
DateTime now = rtc.now();
int hour = now.hour();
int minute = now.minute();
int second = now.second();
// Check pump status and display message if both pumps are on
if (digitalRead(Titik_A_PUMP_1) == HIGH && digitalRead(Titik_B_PUMP_2) == LOW) {
lcd.setCursor(0, 0);
lcd.print("Pump 1 ON ");
lcd.setCursor(0, 1);
lcd.print("Pump 2 OFF ");
showTime = false; // Prevent showing time while displaying message
} else if (digitalRead(Titik_B_PUMP_2) == HIGH && digitalRead(Titik_A_PUMP_1) == LOW) {
lcd.setCursor(0, 0);
lcd.print("Pump 1 OFF ");
lcd.setCursor(0, 1);
lcd.print("Pump 2 ON ");
showTime = false; // Prevent showing time while displaying message
} else {
lcd.setCursor(0, 0);
lcd.print("Pump 1 OFF ");
lcd.setCursor(0, 1);
lcd.print("Pump 2 OFF ");
}
if (showTime) {
lcd.setCursor(0, 2); // Set text position for time
lcd.print("");
if (hour < 10) {
lcd.print("0");
}
lcd.print(hour);
lcd.print(":");
if (minute < 10) {
lcd.print("0");
}
lcd.print(minute);
lcd.print(":");
if (second < 10) {
lcd.print("0");
}
lcd.print(second);
}
if (hour >= 8 && hour < 9) {
digitalWrite(Titik_A_PUMP_1, HIGH);
digitalWrite(Titik_B_PUMP_2, LOW);
} else if ((hour >= 17 && hour < 18)) {
digitalWrite(Titik_A_PUMP_1, HIGH);
digitalWrite(Titik_B_PUMP_2, LOW);
} else if ((hour >= 9 && hour < 10)) {
digitalWrite(Titik_A_PUMP_1, LOW);
digitalWrite(Titik_B_PUMP_2, HIGH);
} else if ((hour >= 18 && hour < 19)) {
digitalWrite(Titik_A_PUMP_1, LOW);
digitalWrite(Titik_B_PUMP_2, HIGH);
} else {
digitalWrite(Titik_A_PUMP_1, LOW);
digitalWrite(Titik_B_PUMP_2, LOW);
}
delay(1000); // Add semicolon at the end
}