From 9a94947c972ca1e880111785fbe2528cf9a3796b Mon Sep 17 00:00:00 2001 From: Matthew Colvin <35540398+Mc067415@users.noreply.github.com> Date: Sat, 29 Jul 2023 23:04:38 -0500 Subject: [PATCH] Update Battery Update Task instead of a time based check and update --- Platformio/src/HardwareRevX.cpp | 33 +++++++++++++++++++++------------ Platformio/src/HardwareRevX.hpp | 6 ++++++ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/Platformio/src/HardwareRevX.cpp b/Platformio/src/HardwareRevX.cpp index 4929aa6..489271b 100644 --- a/Platformio/src/HardwareRevX.cpp +++ b/Platformio/src/HardwareRevX.cpp @@ -396,6 +396,26 @@ void HardwareRevX::setupWifi(){ #endif } +void HardwareRevX::startTasks(){ + if(xTaskCreate(&HardwareRevX::updateBatteryTask, + "Battery Percent Update",1024,nullptr,5,&batteryUpdateTskHndl) != pdPASS){ + debugPrint("ERROR Could not Create Battery Update Task!"); + } +} + +void HardwareRevX::updateBatteryTask([[maybe_unused]] void* aData){ + while(true){ + mInstance->battery_voltage = + analogRead(ADC_BAT) * 2 * 3300 / 4095 + 350; // 350mV ADC offset + mInstance->battery_percentage = + constrain(map(mInstance->battery_voltage, 3700, 4200, 0, 100), 0, 100); + mInstance->battery_ischarging = !digitalRead(CRG_STAT); + // Check if battery is charging, fully charged or disconnected + vTaskDelay(1000/ portTICK_PERIOD_MS); + // Update battery at 1Hz + } +} + void HardwareRevX::loopHandler(){ // Update Backlight brightness static int fadeInTimer = millis(); // fadeInTimer = time after setup @@ -425,18 +445,7 @@ void HardwareRevX::loopHandler(){ } // TODO Convert to free RTOS task - // Update battery stats at 1Hz - static unsigned long batteryTaskTimer = - millis() + 1000; // add 1s to start immediately - if (millis() - batteryTaskTimer >= 1000) { - battery_voltage = - analogRead(ADC_BAT) * 2 * 3300 / 4095 + 350; // 350mV ADC offset - battery_percentage = - constrain(map(battery_voltage, 3700, 4200, 0, 100), 0, 100); - batteryTaskTimer = millis(); - battery_ischarging = !digitalRead(CRG_STAT); - // Check if battery is charging, fully charged or disconnected - } + // TODO Create batter change notification for UI // if (battery_ischarging || (!battery_ischarging && battery_voltage > 4350)) { diff --git a/Platformio/src/HardwareRevX.hpp b/Platformio/src/HardwareRevX.hpp index a254d64..7097ab9 100644 --- a/Platformio/src/HardwareRevX.hpp +++ b/Platformio/src/HardwareRevX.hpp @@ -69,6 +69,12 @@ protected: void handleWifiEvent(WiFiEvent_t event); + // Tasks + void startTasks(); + + static void updateBatteryTask([[maybe_unused]] void* aData); + TaskHandle_t batteryUpdateTskHndl = nullptr; + private: // Static Wrappers Needed to Satisfy C APIs