#include "acs712_05b.h"
#include <LiquidCrystal_I2C.h>
#define solarInput A0
#define buckInput A1
#define relay_power 4
#define led_status 7
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool solar_power;
float buckAvg, solarAvg;
unsigned int blinkInterval;
unsigned long previousMillis = 0;
void setup() {
pinMode(relay_power, OUTPUT);
pinMode(led_status, OUTPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Firmware Version");
lcd.setCursor(0, 1);
lcd.print("2.0.0 30/09/2023");
delay(2000);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= blinkInterval) {
previousMillis = currentMillis;
digitalWrite(led_status, !digitalRead(led_status));
}
solarAvg = measure(solarInput);
buckAvg = measure(buckInput);
if (solarAvg > 0.50) {
solar_power = 1;
blinkInterval = 150;
digitalWrite(relay_power, LOW);
}
else {
solar_power = 0;
blinkInterval = 500;
digitalWrite(relay_power, HIGH);
}
lcd.setCursor(0, 0);
lcd.print("Solar:");
if ((solarAvg) < 10) lcd.print(" ");
lcd.print(solarAvg);
lcd.print("A ");
if (solar_power) lcd.print("ON ");
else lcd.print("OFF");
lcd.setCursor(0, 1);
lcd.print("Buck :");
if ((buckAvg) < 10) lcd.print(" ");
lcd.print(buckAvg, 02);
lcd.print("A ");
if (solar_power) lcd.print("OFF");
else lcd.print("ON ");
}