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

Different saadc_callback for channel

Hi,

I have my SAADC configured with two channels. One for my sensor and one for the battery level measurement.

I only need to measure my battery level every minute for example. But I need to measure my sensor every 30ms.

For now, in my saadc_callback function I do everything. To avoid that I created a variable which I increment every time to avoid doing battery measurement every calls.

void saadc_callback(nrf_drv_saadc_evt_t const * p_event)
{
   
    if (p_event->type == NRF_DRV_SAADC_EVT_DONE)
    {
 
        ret_code_t err_code;

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

      
        val_SENSOR = p_event->data.done.p_buffer[0];
        
        // Measure my sensor
        // Send my sensor value


        
        // No need to measure battery level every time
        // For now update it once every minute so approximately every 2000 times the saadc is called
        if(battery_level_update_timer > 2000){
          val_BAT = p_event->data.done.p_buffer[1];

          // Measure battery level
          // Send new value

          battery_level_update_timer = 0;
        }
        else{
          battery_level_update_timer++;
        }
    }
}

Is there a better way than this ? For example create a saadc_callback for each channel ?

Thanks !

Related