From 74aec42e4434d5155d6f596955cc97e11d673d01 Mon Sep 17 00:00:00 2001 From: Max Hunt Date: Thu, 19 Dec 2019 16:18:25 +0000 Subject: [PATCH] Update --- UPGRADE/Code/v2/v2.ino | 225 ++++++++++++++++++++++++++++++----------- 1 file changed, 166 insertions(+), 59 deletions(-) diff --git a/UPGRADE/Code/v2/v2.ino b/UPGRADE/Code/v2/v2.ino index 4b17a98..ec31c84 100644 --- a/UPGRADE/Code/v2/v2.ino +++ b/UPGRADE/Code/v2/v2.ino @@ -22,45 +22,64 @@ Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); int batteryPct = 0; double battVoltage = 0.0; -int rawBattVal = 0; bool powerState = false; +bool screenOn = false; +bool charging_1 = false; +bool charging_2 = false; +int screenState = 0; +static const unsigned char PROGMEM battery_logo[] = { + B00000011, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000, B00000000, + B00001111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000, + B00011111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111000, B00000000, + B00111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111100, B00000000, + B01111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111110, B00000000, + B01111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111110, B00000000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01100000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01110000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01111000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01111000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01111000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01111000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01111000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01111000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01110000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01100000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, + B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, + B01111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111110, B00000000, + B01111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111110, B00000000, + B00111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111100, B00000000, + B00011111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111000, B00000000, + B00001111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000, + B00000011, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000, B00000000 +}; -static const unsigned char PROGMEM logo_bmp[] = - { B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, - B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, - B00000000, B01111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B10000000, B00000000, - B00000001, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000, B00000000, - B00000011, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000, B00000000, - B00000011, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111110, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B10000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B10000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B10000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111110, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000, - B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000, - B00000011, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000, - B00000001, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000, - B00000000, B01111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000, B00000000, - B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, - B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000}; - +static const unsigned char PROGMEM charge_logo[] = { + B00011111, B11000000, + B00010000, B01000000, + B00100000, B01000000, + B00100000, B10000000, + B01000001, B00000000, + B01000011, B11000000, + B10000000, B01000000, + B11110000, B10000000, + B00010001, B00000000, + B00100010, B00000000, + B00100100, B00000000, + B01001000, B00000000, + B01010000, B00000000, + B01100000, B00000000, +}; void setup() { delay(100); @@ -69,38 +88,55 @@ void setup() { display.setTextColor(WHITE); Serial.begin(9600); pinMode(VBAT, INPUT); - pinMode(CSTAT1, INPUT_PULLUP); - pinMode(CSTAT2, INPUT_PULLUP); + pinMode(CSTAT1, INPUT); + pinMode(CSTAT2, INPUT); pinMode(FETCTRL, OUTPUT); pinMode(PWRLED, OUTPUT); pinMode(CHGLED, OUTPUT); pinMode(PWRBTN, INPUT_PULLUP); pinMode(CHGBTN, INPUT_PULLUP); digitalWrite(FETCTRL, LOW); + battVoltage = GetVoltage(); initScreen(); delay(200); } void loop() { delay(100); - getBatteryState(); - updateDisplay(); - checkEvents(); + checkPresses(); + checkCharging(); + if (screenState != 0) {updateScreen();} } -void getBatteryState(){ - rawBattVal = analogRead(VBAT); - battVoltage = rawBattVal * (5.0 / 1023.0); +void getBatteryCharge(){ + double voltage = GetVoltage(); + + if (voltage > 4.13){batteryPct = 100;} + else if (voltage > 4.06){batteryPct = 90;} + else if (voltage > 3.99){batteryPct = 80;} + else if (voltage > 3.92){batteryPct = 70;} + else if (voltage > 3.85){batteryPct = 60;} + else if (voltage > 3.78){batteryPct = 50;} + else if (voltage > 3.71){batteryPct = 40;} + else if (voltage > 3.64){batteryPct = 30;} + else if (voltage > 3.57){batteryPct = 20;} + else if (voltage > 3.50){batteryPct = 10;} + else if (voltage > 3.40){ + Serial.println("We are fucked"); + batteryPct = 0; + } + else if (voltage < 2){batteryPct = -1;} } -void checkEvents(){ + +void checkPresses(){ if (digitalRead(PWRBTN) == 0) { delay(100); if (digitalRead(PWRBTN) == 0) { blinkLed(PWRLED); if(powerState == true){ - turnOff(); + turnOff(); } else { turnOn(); @@ -111,39 +147,110 @@ void checkEvents(){ delay(100); if (digitalRead(CHGBTN) == 0) { blinkLed(CHGLED); + if (screenState == 1 || screenState == 0) { + screenState++; + } + else { + initScreen(); + screenState = 0; } } + } } +void checkCharging(){ + if (digitalRead(CSTAT1) == 1){ + delay(100); + if (digitalRead(CSTAT1) == 1){ + charging_1 = true; + } + } + else { charging_1 = false; + } + + if (digitalRead(CSTAT2) == 1){ + delay(100); + if (digitalRead(CSTAT2) == 1){ + charging_2 = true; + } + } + else { charging_2 = false; + } +} + + void turnOn() { - digitalWrite(FETCTRL, HIGH); - powerState = true; - } + digitalWrite(FETCTRL, HIGH); + powerState = true; +} + void turnOff() { - digitalWrite(FETCTRL, LOW); - powerState = false; - } + digitalWrite(FETCTRL, LOW); + powerState = false; +} void initScreen() { display.clearDisplay(); display.display(); + screenOn = false; } -void updateDisplay(){ - // display.drawBitmap(0, 0, logo_bmp, 128, 32, WHITE); +void updateScreen() { + getBatteryCharge(); + if (screenState == 1) { + updateDisplayPct(); + } + else if (screenState == 2) { + updateDisplayVoltage(); + } +} +void updateDisplayPct(){ display.clearDisplay(); - - display.drawBitmap(0, 0, logo_bmp, 128, 32, 1); - display.setTextSize(2); - display.setCursor(40, 11); + display.drawBitmap(0, 0, battery_logo, 120, 32, 1); + if (charging_1 == true) {display.drawBitmap(118, 0, charge_logo, 16, 14, 1);} + if (charging_2 == true) {display.drawBitmap(118, 16, charge_logo, 16, 14, 1);} + display.setTextSize(2); + display.setCursor(35, 10); display.setTextColor(0); - display.print(battVoltage); - display.println(" V"); + display.print(batteryPct); + display.println("%"); display.display(); + screenOn = true; } +void updateDisplayVoltage(){ + display.clearDisplay(); + display.drawBitmap(0, 0, battery_logo, 120, 32, 1); + if (charging_1 == true) {display.drawBitmap(118, 0, charge_logo, 16, 14, 1);} + if (charging_2 == true) {display.drawBitmap(118, 16, charge_logo, 16, 14, 1);} + display.setTextSize(2); + display.setCursor(30, 10); + display.setTextColor(0); + display.print(GetVoltage()); + display.println(" V"); + display.display(); + screenOn = true; +} + +double GetVoltage(){ + int totalSamples = 0; + double voltage = 0; + for (int q = 0; q < 10; q++) { + totalSamples = totalSamples + analogRead(VBAT); + delay(5); + } + voltage = (totalSamples / 10) * (5.00 / 1023.0); + if (voltage > (battVoltage-0.03) && voltage < (battVoltage+0.03)) { + return battVoltage; + } + else { + battVoltage = voltage; + return voltage; + } + } + void blinkLed(int ctrlLed) { analogWrite(ctrlLed, 0.00); delay(12); analogWrite(ctrlLed, 0.00); delay(12);