// Pin assignments
const int r1 = 3;
const int r2 = 4;
const int r3 = 5;
const int r4 = 6;
const int r5 = 7;
const int pcs = 8;
int sv = 0; // System state
int bi = 0; // Battery indicator
const int threshold = 200;
unsigned long r1OnTime = 0;
unsigned long r4OnTime = 0;
unsigned long r3OnTime = 0;
const unsigned long delayDuration = 2000; // 2 seconds
void setup() {
pinMode(r1, OUTPUT);
pinMode(r2, OUTPUT);
pinMode(r3, OUTPUT);
pinMode(r4, OUTPUT);
pinMode(r5, OUTPUT);
pinMode(pcs, INPUT);
Serial.begin(9600);
}
void loop() {
// Read sensor values
int pcsState = digitalRead(pcs);
int batteryVoltage = analogRead(A0);
int bs = analogRead(A1);
int bcs = analogRead(A2);
if (pcsState == LOW) {
sv = 1;
} else {
sv = 0;
}
// Relay 1 control with non-blocking delay
if (sv == 1 || batteryVoltage < threshold) {
if (millis() - r1OnTime >= delayDuration) {
digitalWrite(r1, HIGH);
r1OnTime = millis();
}
} else if (pcsState == HIGH) {
digitalWrite(r1, LOW);
}
// Relay 4 control with non-blocking delay
if (sv == 1 || bs < threshold) { //ac mains is on or 3s battery is at critically low
if (millis() - r4OnTime >= delayDuration) { //2sec delay
digitalWrite(r4, HIGH); // r4 turn off
r4OnTime = millis();
}
} else {
digitalWrite(r4, LOW);
}
// Relay 3 control with non-blocking delay
if (batteryVoltage < threshold && bs >= threshold) {
digitalWrite(r3, LOW);
} else if (batteryVoltage > threshold || bs < threshold) {
if (millis() - r3OnTime >= delayDuration) {
digitalWrite(r3, HIGH);
r3OnTime = millis();
}
}
if(bs <680){
digitalWrite(r2, LOW);
}
if(bs > 1000 && bcs > 1000 ){
digitalWrite(r2, HIGH);
}
}