#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BUTTON_ONOFF 12
#define BUTTON_DISPLAYMODE 13
#define LED_SYSTEM_ON 32
#define LED_ALERT 25
LiquidCrystal_I2C lcd(0x27, 16, 2); // initialise i2C lcd
int displayMode = 0; // track which display mode is active
bool systemOn = false; // flag to turn system on and off
void setup() {
Serial.begin(115200);
lcd.begin();
lcd.backlight();
lcd.clear();
setupPins();
}
void setupPins() { // setup pin modes
pinMode(BUTTON_ONOFF, INPUT_PULLUP);
pinMode(BUTTON_DISPLAYMODE, INPUT_PULLUP);
pinMode(LED_SYSTEM_ON, OUTPUT);
pinMode(LED_ALERT, OUTPUT);
}
void updateDisplay() {
lcd.clear();
switch (displayMode) {
case 0:
lcd.setCursor(2, 0);
lcd.print("AUTOMATED");
lcd.setCursor(2, 1);
lcd.print("IRRIGATION");
break;
case 1:
lcd.setCursor(0, 0);
lcd.print("Soil1: ");
//lcd.print(soilMoistureStatus1(soilMoisture1));
lcd.setCursor(0, 1);
lcd.print("Soil2: ");
//lcd.print(soilMoistureStatus2(soilMoisture2));
break;
case 2:
lcd.setCursor(0, 0);
lcd.print("WaterLvl: ");
//lcd.print(waterlevel);
lcd.print("cm");
lcd.setCursor(0, 1);
lcd.print("Status: ");
//lcd.print(waterLvlStatus(waterlevel));
break;
case 3:
lcd.setCursor(0, 0);
lcd.print("FlowRate: ");
// lcd.print(flowRate);
lcd.print(" L/min");
lcd.setCursor(0, 1);
lcd.print("Status: ");
//lcd.print(flowRateStatus(flowRate));
break;
}
}
void handleButtons() {
if (digitalRead(BUTTON_ONOFF) == LOW) {
delay(200);
systemOn = !systemOn; // toggle systemOn state
}
if (digitalRead(BUTTON_DISPLAYMODE) == LOW) {
delay(200);
displayMode = (displayMode + 1) % 4; // cycle through display modes
}
}
void loop() {
handleButtons();
if (systemOn) {
digitalWrite(LED_SYSTEM_ON, HIGH);
digitalWrite(LED_ALERT, HIGH);
updateDisplay();
} else {
digitalWrite(LED_SYSTEM_ON, LOW);
digitalWrite(LED_ALERT, LOW);
lcd.clear();
lcd.noBacklight();
}
delay(500);
}