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