This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

How to call saadc_event_handler multiple times

I am trying to update voltage level in Major value of my beacon. Using nrf_drv_saadc_sample() I have called saadc_event_handler(). The event triggered for first call but not working for successive calls. I want to take average of my voltage, How I can clear the buffer and trigger saadc_event_handler() multiple times?

void saadc_event_handler(nrf_drv_saadc_evt_t const * p_event)
{
m_beacon_info[18]=0x0000;
m_beacon_info[19]=0x0000;
m_beacon_info[20]=0x0000;
m_beacon_info[21]=0x0000;
uint8_t percentage_batt_lvl;
uint16_t batt_lvl_in_milli_volts;
if (p_event->type == NRF_DRV_SAADC_EVT_DONE)
{

nrf_saadc_value_t adc_result;
uint32_t err_code;

adc_result = p_event->data.done.p_buffer[0];

err_code = nrf_drv_saadc_buffer_convert(p_event->data.done.p_buffer, 1);
APP_ERROR_CHECK(err_code);

batt_lvl_in_milli_volts = ADC_RESULT_IN_MILLI_VOLTS(adc_result) +
DIODE_FWD_VOLT_DROP_MILLIVOLTS;
percentage_batt_lvl = battery_level_in_percent(batt_lvl_in_milli_volts);

}
m_beacon_info[19]=batt_lvl_in_milli_volts;
advertising_init();
advertising_start();
}

static void saadc_configure(void)
{
uint8_t err_code;
nrf_saadc_channel_config_t config = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_VDD);
err_code = nrf_drv_saadc_init(NULL, saadc_event_handler);
APP_ERROR_CHECK(err_code);
err_code = nrf_drv_saadc_channel_init(0, &config);
APP_ERROR_CHECK(err_code);

err_code = nrf_drv_saadc_buffer_convert(&adc_buf[0], 1);
APP_ERROR_CHECK(err_code);

err_code = nrf_drv_saadc_buffer_convert(&adc_buf[1], 1);
APP_ERROR_CHECK(err_code);

}

Related