saving and charge indication working

This commit is contained in:
2026-01-19 22:05:35 -06:00
parent 40bea065a7
commit d427859804
9 changed files with 215 additions and 39 deletions

View File

@@ -7,6 +7,7 @@
#include "esp_adc/adc_cali_scheme.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
static const char *TAG = "battery";
@@ -177,23 +178,89 @@ int battery_get_percentage(void)
static void battery_monitoring_task(void *pvParameters)
{
ESP_LOGI(TAG, "Battery monitoring task started");
bool led_toggle = false;
int loop_count = 0;
int voltage_mv = 0;
bool is_charging = false;
while (1) {
int voltage_mv = battery_read_voltage_mv();
int percentage = battery_get_percentage();
while (1)
{
// Read voltage every 20 iterations (5000ms)
if (loop_count % 20 == 0) {
voltage_mv = battery_read_voltage_mv();
int percentage = battery_get_percentage();
if (voltage_mv >= 0 && percentage >= 0) {
// Update system state with battery info
system_setBatteryVoltage(voltage_mv);
system_setBatteryPercentage(percentage);
if (voltage_mv >= 0 && percentage >= 0) {
// Update system state with battery info
system_setBatteryVoltage(voltage_mv);
system_setBatteryPercentage(percentage);
ESP_LOGI(TAG, "Battery: %d mV (%d%%)", voltage_mv, percentage);
} else {
ESP_LOGW(TAG, "Failed to read battery voltage");
ESP_LOGI(TAG, "Battery: %d mV (%d%%)", voltage_mv, percentage);
} else {
ESP_LOGW(TAG, "Failed to read battery voltage");
}
// Read charge status and update system
is_charging = !gpio_get_level(PIN_NUM_CHARGE_STATUS);
system_setChargeStatus(is_charging);
}
// Read battery every 30 seconds
vTaskDelay(pdMS_TO_TICKS(30000));
// LED control based on charging status and voltage (runs every 250ms)
if (is_charging)
{
// Charging: Red until voltage > 4150mV, then Green
if (voltage_mv > 4150) {
gpio_set_level(PIN_LED_GREEN, 1); // Green ON
gpio_set_level(PIN_LED_RED, 0); // Red OFF
} else {
gpio_set_level(PIN_LED_GREEN, 0); // Green OFF
gpio_set_level(PIN_LED_RED, 1); // Red ON
}
gpio_set_level(PIN_NUM_LED_2, 1);
}
else
{
// Not charging: voltage-based indication
if (voltage_mv > 3900)
{
// Good voltage: Green steady
gpio_set_level(PIN_LED_GREEN, 1); // Green ON
gpio_set_level(PIN_LED_RED, 0); // Red OFF
}
else
if (voltage_mv > 3700)
{
// Warning voltage: Green flashing at 2Hz
gpio_set_level(PIN_LED_GREEN, led_toggle ? 0 : 1);
gpio_set_level(PIN_LED_RED, 0); // Red OFF
led_toggle = !led_toggle;
}
else
if (voltage_mv > 3600)
{
// Low voltage: Red steady
gpio_set_level(PIN_LED_GREEN, 0); // Green OFF
gpio_set_level(PIN_LED_RED, 1); // Red ON
}
else
if (voltage_mv > 3500)
{
// Warning voltage: Red flashing at 2Hz
gpio_set_level(PIN_LED_RED, led_toggle ? 0 : 1);
gpio_set_level(PIN_LED_GREEN, 0); // Green OFF
led_toggle = !led_toggle;
}
else
{
// power off
gpio_set_level(PIN_NUM_nON, 0);
}
gpio_set_level(PIN_NUM_LED_2, 1);
}
loop_count++;
vTaskDelay(pdMS_TO_TICKS(250));
}
}