#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // Set I2C address and LCD size
int sensorArus = A0; // Set current sensor pin
int sensorTegangan = A1; // Set voltage sensor pin
int sensorPressure1 = A2; // Set pressure sensor pin
int sensorPressure2 = A3; // Set pressure sensor pin
int sensorPressure3 = A5; // Set pressure sensor pin
int sensorWaterFlow = A6; // Set water flow sensor pin
int sensorLoadcell = A7 ; // Set loadcell sensor pin
int pushButton = 2; // Set push button pin
int mode = 1; // Set initial mode (mode 1 = monitoring current and voltage)
void setup()
{
lcd.init(); // Initialize LCD
lcd.backlight(); // Turn on backlight
pinMode(sensorArus, INPUT); // Set current sensor as input
pinMode(sensorTegangan, INPUT); // Set voltage sensor as input
pinMode(sensorPressure1, INPUT); // Set pressure sensor as input
pinMode(sensorPressure2, INPUT); // Set pressure sensor as input
pinMode(sensorPressure3, INPUT); // Set pressure sensor as input
pinMode(sensorWaterFlow, INPUT); // Set water flow sensor as input
pinMode(sensorLoadcell, INPUT); // Set loadcell sensor as input
pinMode(pushButton, INPUT_PULLUP); // Set push button as input with pull-up resistor
}
void loop()
{
if (digitalRead(pushButton) == LOW) // If push button is pressed
{
lcd.clear();
mode = (mode == 1) ? 2 : ((mode == 2) ? 3 : 1); // Toggle mode (mode 1 -> mode 2, mode 2 -> mode 3, mode 3 -> mode 1)
delay(100); // Wait for 100ms to avoid bouncing
}
if (mode == 1) // Mode monitoring current and voltage
{
float arus = analogRead(sensorArus); // Read current sensor
float tegangan = analogRead(sensorTegangan); // Read voltage sensor
float teganganVolt = tegangan * (5.0 / 1023.0); // Convert analog value to voltage
float arusAmpere = teganganVolt / 0.185; // Convert voltage value to current in amperes
lcd.setCursor(0, 0); // Move to line 1, column 1
lcd.print("Arus: "); // Display label "Arus: "
lcd.print(arusAmpere); // Display current value in amperes
lcd.print("A"); // Display unit "A"
lcd.setCursor(0, 1); // Move to line 2, column 1
lcd.print("Tegangan: "); // Display label "Tegangan: "
lcd.print(teganganVolt); // Display voltage value in volts
lcd.print("V"); // Display unit "V"
}
else if (mode == 2) // Mode monitoring pressure and water flow
{
float pressure = analogRead(sensorPressure1); // Read pressure sensor
float waterFlow = analogRead(sensorWaterFlow); // Read water flow sensor
float pressurePsi = pressure * (5.0 / 1023.0) * 30; // Convert analog value to psi
float waterFlowLpm = waterFlow * (5.0 / 1023.0) * 6; // Convert analog value to LPM
lcd.setCursor(0, 0); // Move to line 1, column 1
lcd.print("P.Air In: "); // Display label "Pressure: "
lcd.print(pressurePsi); // Display pressure value in psi
lcd.print(" Psi");
lcd.setCursor(0, 1); // Move to line 1, column 1
lcd.print("P.Runner: "); // Display label "Pressure: "
lcd.print(pressurePsi); // Display pressure value in psi
lcd.print(" Psi");
lcd.setCursor(0, 2); // Move to line 1, column 1
lcd.print("P.Air Out: "); // Display label "Pressure: "
lcd.print(pressurePsi); // Display pressure value in psi
lcd.print(" Psi");
lcd.setCursor(0, 3); // Move to line 2, column 1
lcd.print("Water Flow:"); // Display label "Water Flow: "
lcd.print(waterFlowLpm); // Display water flow value in LPM
lcd.print(" m/s"); // Display unit "LPM"
}
else if (mode == 3) // Mode monitoring loadcell
{
float loadcell = analogRead(sensorLoadcell); // Read loadcell sensor
float loadcellWeight = loadcell * (5.0 / 1023.0) * 50; // Convert analog value to weight in kg
lcd.setCursor(0, 0); // Move to line 1, column 1
lcd.print("Loadcell: "); // Display label "Loadcell: "
lcd.print(loadcellWeight); // Display loadcell value in kg
lcd.print(" Kg"); // Display unit "kg"
}
}