SAADC 2 Channels Reading is not working well

Hi,

I'm trying to do a 2 channels adc reading to read a value of a potentiometer and a value of a battery level.
When I try to make it, I saw that sometimes, the value of the battery level gets into the buffer[0] where I only want values of the potentiometer.

Here's my code : 

#define SAMPLES_IN_BUFFER               1 
static nrf_saadc_value_t m_buffer[2][SAMPLES_IN_BUFFER];

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;
        uint16_t MAX_VALUE = 940;

        err_code = nrf_drv_saadc_buffer_convert(p_event->data.done.p_buffer, SAMPLES_IN_BUFFER);
        APP_ERROR_CHECK(err_code);
        
        NRF_LOG_INFO("CHANNEL 1 %d", p_event->data.done.p_buffer[1]);
        nrf_delay_ms(50);

        if (p_event->data.done.p_buffer[0] <= get_threshold()){
          speed = 0;
          if (m_count_connected > 0) {
            led_green();
          }
        } else{
          speed = floor(p_event->data.done.p_buffer[0] * (get_sensitivity() / 4.0));
          if (m_count_connected > 0) {
            led_turquoise();
          }
        }

        if (speed > MAX_VALUE){
          speed = MAX_VALUE;
        }
        
        speed_8bits = speed / 3.68;
        pourcent_speed = floor(speed*100/MAX_VALUE);       
        //NRF_LOG_INFO("SPEED %d, SPEED_8BITS %d, PERCENT %d", speed, speed_8bits, pourcent_speed);

        //if (abs(potentiometer_last_value - speed_8bits) > 1) {
        //  idle_time_reset();
        //  restore_last_color();
        //  potentiometer_last_value = speed_8bits;
        //  potentiometer_value_handler(potentiometer_last_value);
        //}

        //if (is_wired_mode()) {
        //  motor_oscillate();
        //}
    }
}

void saadc_init(void)
{
    ret_code_t err_code;
    nrf_saadc_channel_config_t channel_0_config  = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN5);
    nrf_saadc_channel_config_t channel_1_config  = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN4);

    err_code = nrf_drv_saadc_init(NULL, saadc_callback);
    APP_ERROR_CHECK(err_code);

    err_code = nrf_drv_saadc_channel_init(0, &channel_0_config);
    APP_ERROR_CHECK(err_code);
    err_code = nrf_drv_saadc_channel_init(1, &channel_1_config);
    APP_ERROR_CHECK(err_code);

    err_code = nrf_drv_saadc_buffer_convert(m_buffer[0], SAMPLES_IN_BUFFER);
    APP_ERROR_CHECK(err_code);
    err_code = nrf_drv_saadc_buffer_convert(m_buffer[1], SAMPLES_IN_BUFFER);
    APP_ERROR_CHECK(err_code);
}

What am I doing wrong ?

Thanks,

Chris

Parents Reply Children
No Data
Related