#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define ADCPIN A0
#define ADCPIN A3
#define ADCPIN A5
int source1;
int source2;
int source3;
float voltage;
float bat_vol;
char data[10];
float bat_per;
void setup()
{
pinMode(2, OUTPUT);
pinMode(19, OUTPUT);
pinMode(18, OUTPUT);
pinMode(5, OUTPUT);
lcd.begin(20, 4);
Serial.begin(115200);
}
void loop()
{
source1 = analogRead(A0);
source2 = analogRead(A3);
source3 = analogRead(A5);
voltage = source3 * 3.3 / 4095;
bat_vol = voltage * 12.012 / 3.3;
bat_per = bat_vol * 100 / 12.012;
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Supply :");
if (source1 > 0)
{
if (source1 >= source2 && source2 >= source3)
{
lcd.setCursor(9, 0);
lcd.print("Solar ");
digitalWrite(19, HIGH);
digitalWrite(18, LOW);
digitalWrite(5, LOW);
}
if (source1 >= source3 && source3 >= source2)
{
lcd.setCursor(9, 0);
lcd.print("Solar ");
digitalWrite(19, HIGH);
digitalWrite(18, LOW);
digitalWrite(5, LOW);
}
}
if (source2 > 0)
{
if (source2 > source1 && source1 >= source3)
{
lcd.setCursor(9, 0);
lcd.print("Main ");
digitalWrite(19, LOW);
digitalWrite(18, HIGH);
digitalWrite(5, LOW);
}
if (source2 >= source3 && source3 > source1)
{
lcd.setCursor(9, 0);
lcd.print("Main ");
digitalWrite(19, LOW);
digitalWrite(18, HIGH);
digitalWrite(5, LOW);
}
}
if (source3 > 0)
{
if (source3 > source1 && source1 >= source2)
{
lcd.setCursor(9, 0);
lcd.print("Battery ");
digitalWrite(19, LOW);
digitalWrite(18, LOW);
digitalWrite(5, HIGH);
}
if (source3 > source2 && source2 > source1)
{
lcd.setCursor(9, 0);
lcd.print("Battery ");
digitalWrite(19, LOW);
digitalWrite(18, LOW);
digitalWrite(5, HIGH);
}
}
if (source1 == 0 && source2 == 0 && source3 == 0)
{
lcd.setCursor(9, 0);
lcd.print("No Supply");
digitalWrite(19, LOW);
digitalWrite(18, LOW);
digitalWrite(5, LOW);
}
lcd.setCursor(0, 1);
lcd.print("Battery :");
if (bat_per >= 90)
{
digitalWrite(2, LOW);
lcd.print("Full");
}
if (bat_per < 90)
{
digitalWrite(2, HIGH);
lcd.print("Charging");
digitalWrite(5, LOW);
}
lcd.setCursor(11, 2);
lcd.print(bat_per);
lcd.print("%");
}