#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
}
GND5VSDASCLSQWRTCDS1307+