#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
const int DG_LED = 2;
const int BESS_LED = 3;
LiquidCrystal_I2C lcd1(0x27, 16, 2); // DG/BESS status
LiquidCrystal_I2C lcd2(0x3F, 16, 2); // RTC display
RTC_DS3231 rtc;
void setup() {
Serial.begin(9600);
pinMode(DG_LED, OUTPUT);
pinMode(BESS_LED, OUTPUT);
lcd1.init(); lcd1.backlight();
lcd2.init(); lcd2.backlight();
lcd1.print("System Ready");
lcd2.print("Clock Init...");
if (!rtc.begin()) {
lcd2.clear();
lcd2.print("RTC Error");
while (1);
}
}
void loop() {
// DG/BESS control on LCD1
if (Serial.available()) {
String input = Serial.readStringUntil('\n');
input.trim();
lcd1.clear();
lcd1.setCursor(0, 0);
if (input == "DG") {
digitalWrite(DG_LED, HIGH);
digitalWrite(BESS_LED, LOW);
lcd1.print("DG ON, BESS OFF");
} else if (input == "BESS") {
digitalWrite(DG_LED, LOW);
digitalWrite(BESS_LED, HIGH);
lcd1.print("BESS ON, DG OFF");
} else if (input == "DG+BESS" || input == "BESS+DG") {
digitalWrite(DG_LED, HIGH);
digitalWrite(BESS_LED, HIGH);
lcd1.print("DG & BESS ON");
} else if (input == "OFF") {
digitalWrite(DG_LED, LOW);
digitalWrite(BESS_LED, LOW);
lcd1.print("DG & BESS OFF");
} else {
lcd1.print("Unknown command");
}
}
// RTC display on LCD2
DateTime now = rtc.now();
lcd2.clear();
lcd2.setCursor(0, 0);
lcd2.print("Date:");
lcd2.print(now.day());
lcd2.print("-");
lcd2.print(now.month());
lcd2.print("-");
lcd2.print(now.year());
lcd2.setCursor(0, 1);
lcd2.print("Time:");
lcd2.print(now.hour());
lcd2.print(":");
lcd2.print(now.minute());
lcd2.print(":");
lcd2.print(now.second());
delay(1000);
}