saving and charge indication working
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user