|
@ -2,7 +2,13 @@ |
|
|
#include "board_battery_state.h" |
|
|
#include "board_battery_state.h" |
|
|
|
|
|
|
|
|
void BoardBattery_init() {} |
|
|
void BoardBattery_init() {} |
|
|
|
|
|
static bool m_is_load = false; |
|
|
void BoardBattery_load() { |
|
|
void BoardBattery_load() { |
|
|
|
|
|
if (m_is_load) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
m_is_load = true; |
|
|
nrf_drv_saadc_config_t adccfg = NRFX_SAADC_DEFAULT_CONFIG; |
|
|
nrf_drv_saadc_config_t adccfg = NRFX_SAADC_DEFAULT_CONFIG; |
|
|
adccfg.resolution = NRF_SAADC_RESOLUTION_12BIT; // 4096 等于满采样率 |
|
|
adccfg.resolution = NRF_SAADC_RESOLUTION_12BIT; // 4096 等于满采样率 |
|
|
ZERROR_CHECK(nrf_drv_saadc_init(&adccfg, NULL)); |
|
|
ZERROR_CHECK(nrf_drv_saadc_init(&adccfg, NULL)); |
|
@ -11,7 +17,10 @@ void BoardBattery_load() { |
|
|
channel_config.acq_time = NRF_SAADC_ACQTIME_20US; |
|
|
channel_config.acq_time = NRF_SAADC_ACQTIME_20US; |
|
|
ZERROR_CHECK(nrfx_saadc_channel_init(BATTERY_ADC_CHANNEL, &channel_config)); |
|
|
ZERROR_CHECK(nrfx_saadc_channel_init(BATTERY_ADC_CHANNEL, &channel_config)); |
|
|
} |
|
|
} |
|
|
void BoardBattery_unload() { nrf_drv_saadc_uninit(); } |
|
|
|
|
|
|
|
|
void BoardBattery_unload() { |
|
|
|
|
|
m_is_load = false; |
|
|
|
|
|
nrf_drv_saadc_uninit(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
int16_t BoardBattery_get_adc_val() { |
|
|
int16_t BoardBattery_get_adc_val() { |
|
|
int16_t val = znrf_adc_channel_read_val(BATTERY_ADC_CHANNEL); |
|
|
int16_t val = znrf_adc_channel_read_val(BATTERY_ADC_CHANNEL); |
|
@ -27,10 +36,17 @@ int16_t BoardBattery_get_battery_level() { |
|
|
|
|
|
|
|
|
float percent = (voltage - minv) / (maxv - minv) * 100 + (float)0.1 /*加0.1是为了避免999.999时显示电量为90*/; |
|
|
float percent = (voltage - minv) / (maxv - minv) * 100 + (float)0.1 /*加0.1是为了避免999.999时显示电量为90*/; |
|
|
int16_t percent_int = (int16_t)percent; |
|
|
int16_t percent_int = (int16_t)percent; |
|
|
if (percent_int < 10 && percent_int != 0) { |
|
|
|
|
|
percent_int = 3; |
|
|
|
|
|
} else { |
|
|
|
|
|
percent_int = percent_int / 10 * 10; |
|
|
|
|
|
|
|
|
if (percent_int < 0) { |
|
|
|
|
|
percent_int = 0; |
|
|
|
|
|
} else if (percent_int > 100) { |
|
|
|
|
|
percent_int = 100; |
|
|
} |
|
|
} |
|
|
return percent_int; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (percent_int < 10 && percent_int != 0) { |
|
|
|
|
|
// percent_int = 3; |
|
|
|
|
|
// } else { |
|
|
|
|
|
// percent_int = percent_int / 10 * 10; |
|
|
|
|
|
// } |
|
|
|
|
|
return 10; |
|
|
|
|
|
// return percent_int; |
|
|
} |
|
|
} |