In order to stabilize the battery reading,
I modified the process to make 5 consecutive readings, as the process is asynchronous, there is no interference in the main process.
This commit is contained in:
@@ -23,12 +23,20 @@ void Battery::Update() {
|
||||
isCharging = !nrf_gpio_pin_read(chargingPin);
|
||||
isPowerPresent = !nrf_gpio_pin_read(powerPresentPin);
|
||||
|
||||
if ( isReading ) return;
|
||||
// Non blocking read
|
||||
SaadcInit();
|
||||
nrfx_saadc_sample();
|
||||
samples = 0;
|
||||
isReading = true;
|
||||
SaadcInit();
|
||||
|
||||
nrfx_saadc_sample();
|
||||
|
||||
}
|
||||
|
||||
void Battery::adcCallbackStatic(nrfx_saadc_evt_t const *event) {
|
||||
instance->SaadcEventHandler(event);
|
||||
}
|
||||
|
||||
void Battery::SaadcInit() {
|
||||
nrfx_saadc_config_t adcConfig = NRFX_SAADC_DEFAULT_CONFIG;
|
||||
APP_ERROR_CHECK(nrfx_saadc_init(&adcConfig, adcCallbackStatic));
|
||||
@@ -68,10 +76,13 @@ void Battery::SaadcEventHandler(nrfx_saadc_evt_t const * p_event) {
|
||||
|
||||
percentRemainingBuffer.insert(percentRemaining);
|
||||
|
||||
nrfx_saadc_uninit();
|
||||
samples++;
|
||||
if ( samples > percentRemainingSamples ) {
|
||||
nrfx_saadc_uninit();
|
||||
isReading = false;
|
||||
} else {
|
||||
nrfx_saadc_sample();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Battery::adcCallbackStatic(nrfx_saadc_evt_t const *event) {
|
||||
instance->SaadcEventHandler(event);
|
||||
}
|
||||
|
Reference in New Issue
Block a user