//Power LED on pin 4
//Fault LED on pin 13
//relay module on pin 7
//voltage sensor digital on pin 12
//updated sensor to A0 to monitor voltage
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
int sensorState = 0;
void setup() {
lcd.init();
lcd.backlight();
Serial.begin(9600);
Serial.println();
pinMode(7, OUTPUT);
pinMode(4, OUTPUT);
pinMode(12, INPUT);
pinMode(13, OUTPUT);
}
void loop() {
lcd.init();
lcd.setCursor(0, 0);
lcd.print("HELLO");
lcd.setCursor(0, 1);
lcd.print("SYSTEM STARTUP");
delay(1000);
startloop:
// Print something
Serial.println("Rebooting");
lcd.init();
lcd.setCursor(0, 0);
lcd.print("REBOOTING");
for (int i = 0; i <= 10; i++) {
digitalWrite(4, HIGH);
delay(500);
digitalWrite(4, LOW);
delay(500);
}
digitalWrite(4, HIGH);
digitalWrite(7, HIGH);
delay(500);
digitalWrite(7, LOW);
delay(100);
digitalWrite(4, HIGH);
delay(2000);
//exit(0);
lcd.init();
monitorloop:
int sensorValue = analogRead(A0);
delay(100);
float voltage = sensorValue * (5.0 / 1023.0);
delay(100);
if (voltage < 4) {
//voltage is low
digitalWrite(13, HIGH);
lcd.setCursor(0, 0);
lcd.init();
lcd.print("FAULT DETECTED");
lcd.setCursor(0, 1);
lcd.print(voltage);
lcd.setCursor(4, 1);
lcd.print("V");
Serial.println("Fault detected");
Serial.println(voltage);
delay(5000);
goto startloop;
} else {
//voltage is good
digitalWrite(13, LOW);
lcd.init();
lcd.setCursor(0, 0);
lcd.print("SYSTEM OK");
lcd.setCursor(0, 1);
lcd.print(voltage);
lcd.setCursor(4, 1);
lcd.print("V");
Serial.println("System OK");
Serial.println(voltage);
delay(5000);
goto monitorloop;
}
}