#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define Cell1 34
#define Cell2 35
#define Cell3 32
#define Cell4 33
#define Relay 26
#define Buzzer 25
#define minV 1.5
#define maxV 2.5
#define cellnum 4
#define Resolution 4095
LiquidCrystal_I2C lcd(0x27, 16, 2);
enum HealthState{
Healthy,
MinorImbalance,
CiticalImbalance,
PackFailure,
};
enum Condition{
WeakVoltage,
HighVoltage,
SensorFailure,
Fluctuations,
};
int cell[cellnum];
int weakcell[cellnum];
int strongcell[cellnum];
float greatestv, lowestv;
float cellvoltage[cellnum];
unsigned long interval=5000;
void setup(){
Serial.begin(115200);
analogReadResolution(12);
pinMode(Buzzer, OUTPUT);
noTone(Buzzer);
pinMode(Relay, OUTPUT);
digitalWrite(Relay, LOW);
Wire.begin(21,22);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Battery");
lcd.setCursor(0, 1);
lcd.print("Management");
delay(5000);
lcd.clear();
}
void loop(){
unsigned long timenow=millis();
if (timenow=interval){
readcells();
analysepack();
checkhealth();
safetykernel();
Serial.print("Strong cells are: ");
Serial.println(strongcell[cellnum]);
Serial.print("Weak cells are: ");
Serial.println(weakcell[cellnum]);
}
}
void readcells() {
for (int i = 0; i < cellnum; i++) {
long raw = analogRead(cell[i]);
cellvoltage[i] = (raw / Resolution) * 3.3;
}
}
void analysepack() {
for (int i = 0; i < cellnum; i++) {
if (cellvoltage[i] > minV && cellvoltage[i] < maxV) {
strongcell[i] = cell[i];
} else {
weakcell[i] = cell[i];
}
}
}
void checkhealth() {
}
void safetykernel() {
}