int analogInput = A0;
unsigned int total;
float voltage;
float vout = 0.0;
float R1 = 1000;
float R2 = 1000;
int value = 0;
float batt1;
float batt2;
float batt_LOW = 1.40;
float batt_MAX = 4.40;
int Start = 2;
int GREEN_LED = 3;
int charge_1 = 4;
int charge_2 = 5;
int charge_3 = 6;
int charge_4 = 7;
int charge_5 = 8;
void setup()
{ Serial.begin(9600);
pinMode(GREEN_LED, OUTPUT);
pinMode(analogInput, INPUT);
pinMode(charge_1, OUTPUT);
pinMode(charge_2, OUTPUT);
pinMode(charge_3, OUTPUT);
pinMode(charge_4, OUTPUT);
pinMode(charge_5, OUTPUT);
pinMode(Start, INPUT_PULLUP);
digitalWrite(charge_1, HIGH);
digitalWrite(charge_2, HIGH);
digitalWrite(charge_3, HIGH);
digitalWrite(charge_4, HIGH);
digitalWrite(charge_5, HIGH);
delay(500);
}
unsigned long lastStart = 0;
int intervalStart = 50;
bool started = false;
byte step = 0;
unsigned long lastStep = 0;
int intervalStep = 1000;
void loop()
{
if (millis() - lastStart >= intervalStart) {
lastStart = millis();
if (digitalRead(Start) == LOW && !started)
{ Serial.println(" NOW ON. ");
// delay(800);
digitalWrite(GREEN_LED, LOW);
// batt_1();
started = true;
step = 0;
}
}
if (started)
{
switch (step) {
case 0: if (checkMaxBat()) {
step = 1;
} else {
started = false;
} break;
case 1: if (millis() - lastStep >= intervalStep) {
step = 2;
} break;
case 2: digitalWrite(charge_1, LOW);
lastStep = millis();
intervalStep = 600;
step = 3;
break;
case 3: if (millis() - lastStep >= intervalStep) {
step = 4;
} break;
case 4: digitalWrite(charge_2, LOW);
lastStep = millis();
intervalStep = 1200;
step = 5;
break;
case 5: if (millis() - lastStep >= intervalStep) {
step = 6;
} break;
case 6: digitalWrite(charge_3, LOW);
lastStep = millis();
intervalStep = 600;
step = 7;
break;
case 7: if (millis() - lastStep >= intervalStep) {
step = 8;
} break;
case 8: digitalWrite(charge_4, LOW);
lastStep = millis();
intervalStep = 800;
step = 9;
break;
case 9: if (millis() - lastStep >= intervalStep) {
step = 10;
} break;
case 10: digitalWrite(charge_5, LOW);
lastStep = millis();
intervalStep = 1200;
step = 11;
break;
case 11: if (millis() - lastStep >= intervalStep) {
step = 12;
} break;
case 12: if (checkMinBat()) {
step = 13;
} else {
started = false;
} break;
case 13: digitalWrite(charge_1, HIGH);
lastStep = millis();
intervalStep = 1000;
step = 14;
break;
case 14: if (millis() - lastStep >= intervalStep) {
step = 15;
} break;
case 15: digitalWrite(charge_2, HIGH);
lastStep = millis();
intervalStep = 1000;
step = 16;
break;
case 16: if (millis() - lastStep >= intervalStep) {
step = 17;
} break;
case 17: digitalWrite(charge_3, HIGH);
lastStep = millis();
intervalStep = 1000;
step = 18;
break;
case 18: if (millis() - lastStep >= intervalStep) {
step = 19;
} break;
case 19: digitalWrite(charge_4, HIGH);
lastStep = millis();
intervalStep = 1000;
step = 20;
break;
case 20: if (millis() - lastStep >= intervalStep) {
step = 21;
} break;
case 21: digitalWrite(charge_5, LOW);
lastStep = millis();
intervalStep = 1800;
step = 22;
break;
case 22: if (millis() - lastStep >= intervalStep) {
step = 23;
intervalStep = 1000;
}
break;
case 23: digitalWrite(charge_1, HIGH);
digitalWrite(charge_2, HIGH);
digitalWrite(charge_3, HIGH);
digitalWrite(charge_4, HIGH);
digitalWrite(charge_5, HIGH);
step = 24;
intervalStep = 1000;
lastStep = millis();
break;
case 24: if (millis() - lastStep >= intervalStep) {
step = 0;
intervalStep = 1000;
started = false;
} break;
}
}
}
bool checkMaxBat() {
bool result = false;
Serial.println("Reading Batt Max - check Switch");
delay(5000);
total = analogRead(analogInput);
batt1 = (total);
//delay(1000);
total = 0;
if (batt1 >= batt_MAX) {
result = true;
lastStep = millis();
intervalStep = 1000;
}
return result;
}
bool checkMinBat() {
bool result = false;
Serial.println("Reading Batt Min - check Switch");
delay(5000);
total = analogRead(analogInput);
batt2 = (total);
//delay(1000);
total = 0;
if (batt2 <= batt_LOW) {
result = true;
lastStep = millis();
intervalStep = 1000;
}
return result;
}
void batt_1()
{ total = analogRead(analogInput);
batt1 = (total);
delay(1000);
total = 0;
if (batt1 >= batt_MAX)
{ digitalWrite(charge_1, LOW);
delay(60000);
digitalWrite(charge_2, LOW);
delay(120000);
digitalWrite(charge_3, LOW);
delay(60000);
digitalWrite(charge_4, LOW);
delay(80000);
digitalWrite(charge_5, HIGH);
delay(120000);
batt_2();
}
}
void batt_2()
{ total = analogRead(analogInput);
batt2 = (total); // convert readings to volt
delay(1000); // 2 seconds between measurements
total = 0; // reset value
if (batt2 <= batt_LOW)
{ delay(1000);
digitalWrite(charge_1, HIGH);
delay(1000);
digitalWrite(charge_2, HIGH);
delay(1000);
digitalWrite(charge_3, HIGH);
delay(1000);
digitalWrite(charge_4, HIGH);
delay(1000);
digitalWrite(charge_5, LOW);
delay(180000);
batt_Stop();
}
}
void batt_Stop()
{ delay(1000);
digitalWrite(charge_1, HIGH);
digitalWrite(charge_2, HIGH);
digitalWrite(charge_3, HIGH);
digitalWrite(charge_4, HIGH);
digitalWrite(charge_5, HIGH);
delay(1000);
}