ret_code_t nrf_drv_csense_sample(void) { ASSERT(m_csense.module_state == NRF_DRV_STATE_POWERED_ON); if(m_csense.adc_channels_input_mask != 0) { if(m_csense.channels_to_read == 0) { #if USE_COMP == 0 && defined(SAADC_PRESENT) nrf_saadc_enable(); #endif if(nrf_drv_csense_is_busy() == true) { return NRF_ERROR_BUSY; } m_csense.busy = true; m_csense.channels_to_read = m_csense.adc_channels_input_mask; calculate_next_channel(); } #if USE_COMP if (!m_csense.timers_powered_on) { nrf_drv_timer_enable(&m_timer0); nrf_drv_timer_enable(&m_timer1); m_csense.timers_powered_on = true; } else { nrf_drv_timer_resume(&m_timer0); nrf_drv_timer_resume(&m_timer1); } nrf_drv_comp_pin_select((nrf_comp_input_t)m_csense.cur_chann_idx); nrf_drv_comp_start(0, 0); #else ret_code_t err_code; #ifdef ADC_PRESENT adc_channel.config.config.ain = (nrf_adc_config_input_t)(1<<m_csense.cur_chann_idx); nrf_gpio_pin_clear(m_csense.output_pin); err_code = nrf_drv_adc_sample_convert(&adc_channel, NULL); #elif defined(SAADC_PRESENT) saadc_channel.pin_p = (nrf_saadc_input_t)(m_csense.cur_chann_idx + 1); nrf_saadc_channel_input_set(0, saadc_channel.pin_p, NRF_SAADC_INPUT_DISABLED); nrf_gpio_pin_clear(m_csense.output_pin); err_code = nrf_drv_saadc_sample(); #endif //ADC_PRESENT if(err_code != NRF_SUCCESS) { return err_code; } #endif //USE_COMP } return NRF_SUCCESS; }
/** * @brief Function for configuring pads threshold. */ void configure_thresholds(void) { ret_code_t err_code; uint32_t new_th_pad_1; uint32_t new_th_pad_2; for (int i = 0; i < 2; i++) { max_value[i] = 0; min_value[i] = UINT32_MAX; } NRF_LOG_INFO("Touch both pads.\r\n"); NRF_LOG_FLUSH(); nrf_delay_ms(1000); NRF_LOG_INFO("3...\r\n"); NRF_LOG_FLUSH(); nrf_delay_ms(1000); NRF_LOG_INFO("2...\r\n"); NRF_LOG_FLUSH(); nrf_delay_ms(1000); NRF_LOG_INFO("1...\r\n"); NRF_LOG_FLUSH(); err_code = nrf_drv_csense_sample(); if (err_code != NRF_SUCCESS) { NRF_LOG_INFO("Busy.\n"); return; } while (nrf_drv_csense_is_busy()); NRF_LOG_INFO("Release both pads.\r\n"); NRF_LOG_FLUSH(); nrf_delay_ms(1000); NRF_LOG_INFO("3...\r\n"); NRF_LOG_FLUSH(); nrf_delay_ms(1000); NRF_LOG_INFO("2...\r\n"); NRF_LOG_FLUSH(); nrf_delay_ms(1000); NRF_LOG_INFO("1...\r\n"); NRF_LOG_FLUSH(); err_code = nrf_drv_csense_sample(); if (err_code != NRF_SUCCESS) { NRF_LOG_INFO("Busy.\n"); return; } while (nrf_drv_csense_is_busy()); nrf_delay_ms(100); new_th_pad_1 = max_value[PAD_ID_0]; new_th_pad_1 += min_value[PAD_ID_0]; new_th_pad_1 /= 2; new_th_pad_2 = max_value[PAD_ID_1]; new_th_pad_2 += min_value[PAD_ID_1]; new_th_pad_2 /= 2; threshold_value_pad1 = new_th_pad_1; threshold_value_pad2 = new_th_pad_2; NRF_LOG_INFO("New thresholds, AIN1: %d, AIN7: %d.\r\n", (unsigned int)new_th_pad_1, (unsigned int)new_th_pad_2); }