This commit is contained in:
Max Hunt 2020-01-04 00:54:27 +00:00
parent fae61b8b88
commit 088fa5da21

View File

@ -26,14 +26,6 @@
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int batteryPct = 0;
double battVoltage = 0.0;
static const double chargeModifier = -0.04;
static const double dischargeModifier = 0.04;
double voltageModifier = 0;
bool powerState = false; bool powerState = false;
bool screenOn = false; bool screenOn = false;
bool charging_1 = false; bool charging_1 = false;
@ -138,14 +130,11 @@ void setup() {
pinMode(PWRBTN, INPUT_PULLUP); pinMode(PWRBTN, INPUT_PULLUP);
pinMode(CHGBTN, INPUT_PULLUP); pinMode(CHGBTN, INPUT_PULLUP);
digitalWrite(FETCTRL, LOW); digitalWrite(FETCTRL, LOW);
battVoltage = GetVoltage();
resetScreen(); resetScreen();
delay(200); delay(200);
/*
FuelGauge.begin(); FuelGauge.begin();
FuelGauge.reset(); //<== Might cause problems FuelGauge.reset(); //<== Might cause problems
FuelGauge.quickstart(); FuelGauge.quickstart();
*/
} }
void loop() { void loop() {
@ -166,41 +155,6 @@ void loop() {
} }
} }
void getBatteryCharge(){
double voltage = GetVoltage();
if (voltage > 4.15){batteryPct = 100;}
else if (voltage > 4.11){batteryPct = 95;}
else if (voltage > 4.08){batteryPct = 90;}
else if (voltage > 4.02){batteryPct = 85;}
else if (voltage > 3.98){batteryPct = 80;}
else if (voltage > 3.95){batteryPct = 75;}
else if (voltage > 3.91){batteryPct = 70;}
else if (voltage > 3.87){batteryPct = 65;}
else if (voltage > 3.85){batteryPct = 60;}
else if (voltage > 3.83){batteryPct = 55;}
else if (voltage > 3.82){batteryPct = 50;}
else if (voltage > 3.80){batteryPct = 45;}
else if (voltage > 3.79){batteryPct = 40;}
else if (voltage > 3.77){batteryPct = 35;}
else if (voltage > 3.75){batteryPct = 30;}
else if (voltage > 3.73){batteryPct = 25;}
else if (voltage > 3.71){batteryPct = 20;}
else if (voltage > 3.69){batteryPct = 15;}
else if (voltage > 3.61){batteryPct = 10;}
else if (voltage > 3.40){
batteryPct = 0;
}
else if (voltage < 2){batteryPct = -1;}
}
void _getBatteryCharge(){
batteryPct = FuelGauge.percent();
}
void checkPresses(){ void checkPresses(){
if (digitalRead(PWRBTN) == 0) { if (digitalRead(PWRBTN) == 0) {
if (powerState == true || screenState != 0) { if (powerState == true || screenState != 0) {
@ -257,7 +211,6 @@ void checkCharging(){
} }
} }
void turnOn() { void turnOn() {
if(isSafe == true){ if(isSafe == true){
blinkLed(PWRLED); blinkLed(PWRLED);
@ -275,30 +228,24 @@ void turnOff() {
powerState = false; powerState = false;
} }
void resetScreen() { void resetScreen() {
display.clearDisplay(); display.clearDisplay();
display.display(); display.display();
screenOn = false; screenOn = false;
} }
void updateScreen() { void updateScreen(){
getBatteryCharge();
updateDisplay();
}
void updateDisplay(){
display.clearDisplay(); display.clearDisplay();
display.drawBitmap(0, 0, battery_logo, 120, 32, 1); display.drawBitmap(0, 0, battery_logo, 120, 32, 1);
display.setTextSize(2); display.setTextSize(2);
display.setCursor(30, 10); display.setCursor(30, 10);
display.setTextColor(0); display.setTextColor(0);
if (screenState == 1){ if (screenState == 1){
display.print(batteryPct); display.print(getPct());
display.println("%"); display.println("%");
} }
else if (screenState == 2){ else if (screenState == 2){
display.print(GetVoltage()); display.print(getVoltage());
display.println(" V"); display.println(" V");
} }
updateDispayHelper(); updateDispayHelper();
@ -314,42 +261,23 @@ void updateDisplayChg(){
} }
void updateDispayHelper(){ void updateDispayHelper(){
int batteryPct = getPct();
if (charging_1 == true && batteryPct != 100) {display.drawBitmap(118, 0, charge_logo, 16, 14, 1); screenOn = true;} if (charging_1 == true && batteryPct != 100) {display.drawBitmap(118, 0, charge_logo, 16, 14, 1); screenOn = true;}
else if (charging_2 == true && batteryPct != 100) {display.drawBitmap(118, 16, charge_logo, 16, 14, 1); screenOn = true;} else if (charging_2 == true && batteryPct != 100) {display.drawBitmap(118, 16, charge_logo, 16, 14, 1); screenOn = true;}
else if (charging_1 == true && batteryPct == 100) {display.drawBitmap(118, 0, charged_logo, 16, 14, 1); screenOn = true;} else if (charging_1 == true && batteryPct == 100) {display.drawBitmap(118, 0, charged_logo, 16, 14, 1); screenOn = true;}
else if (charging_2 == true && batteryPct == 100) {display.drawBitmap(118, 16, charged_logo, 16, 14, 1); screenOn = true;} else if (charging_2 == true && batteryPct == 100) {display.drawBitmap(118, 16, charged_logo, 16, 14, 1); screenOn = true;}
} }
double GetVoltage(){ double getVoltage(){
int totalSamples = 0; return (FuelGauge.voltage()/1000);
double voltage = 0;
for (int q = 0; q < 10; q++) {
totalSamples = totalSamples + analogRead(VBAT);
delay(5);
}
voltage = (totalSamples / 10) * (5.00 / 1023.0);
if(charging_1 == true || charging_2 == true){voltageModifier = chargeModifier;}
else if(powerState == true){voltageModifier = dischargeModifier;}
else {voltageModifier = 0;}
voltage = voltage + voltageModifier;
if (voltage > (battVoltage-0.03) && voltage < (battVoltage+0.03)) {
return battVoltage;
}
else {
battVoltage = voltage;
return voltage;
}
} }
double _GetVoltage(){ int getPct(){
return (FuelGauge.voltage()); return (FuelGauge.percent());
} }
void safetyCheck(){ void safetyCheck(){
double currentVoltage = GetVoltage(); double currentVoltage = getVoltage();
if(currentVoltage > 3.40 ){ //|| currentVoltage < 1.00 if(currentVoltage > 3.40 ){ //|| currentVoltage < 1.00
isSafe = true; isSafe = true;
} }