Files

55 lines
1.5 KiB
C++
Raw Permalink Normal View History

2026-02-15 02:48:59 +09:00
#include <stdio.h>
#include <freertos/FreeRTOS.h>
#include "adc_bsp.h"
#include "esp_log.h"
static adc_cali_handle_t cali_handle;
static adc_oneshot_unit_handle_t adc1_handle;
void Adc_PortInit() {
adc_cali_curve_fitting_config_t cali_config = {};
cali_config.unit_id = ADC_UNIT_1;
cali_config.atten = ADC_ATTEN_DB_12;
cali_config.bitwidth = ADC_BITWIDTH_12;
ESP_ERROR_CHECK(adc_cali_create_scheme_curve_fitting(&cali_config, &cali_handle));
adc_oneshot_unit_init_cfg_t init_config1 = {};
init_config1.unit_id = ADC_UNIT_1;
ESP_ERROR_CHECK(adc_oneshot_new_unit(&init_config1, &adc1_handle));
adc_oneshot_chan_cfg_t config = {};
config.bitwidth = ADC_BITWIDTH_12;
config.atten = ADC_ATTEN_DB_12;
ESP_ERROR_CHECK(adc_oneshot_config_channel(adc1_handle, ADC_CHANNEL_3, &config));
}
float Adc_GetBatteryVoltage() {
int value;
int tage = 0;
float vol = 0;
esp_err_t err;
err = adc_oneshot_read(adc1_handle,ADC_CHANNEL_3,&value);
if(err == ESP_OK) {
adc_cali_raw_to_voltage(cali_handle,value,&tage);
vol = 0.001 * tage * 3;
}
return vol;
}
uint8_t Adc_GetBatteryLevel() {
float vol = Adc_GetBatteryVoltage();
if(vol < 3.0) {
return 0;
}
if(vol > 4.12) {
return 100;
}
float level = ((vol - 3.0) / 1.12) * 100;
//ESP_LOGW("Battery","Voltage: %.3f V, Level: %.1f %%",vol,level);
return (uint8_t)level;
}
2026-02-16 14:39:21 +09:00
bool Adc_IsCharging() {
2026-02-16 16:17:26 +09:00
return Adc_GetBatteryVoltage() > 4.10f;
2026-02-16 14:39:21 +09:00
}