From 3061ecca3d0fdfb87dabbf5f63c9e06c2a30f53a Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Thu, 23 Aug 2018 17:08:59 +0200 Subject: o Initial import. --- .../examples/peripheral/csense/main.c | 233 +++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 thirdparty/nRF5_SDK_15.0.0_a53641a/examples/peripheral/csense/main.c (limited to 'thirdparty/nRF5_SDK_15.0.0_a53641a/examples/peripheral/csense/main.c') diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/examples/peripheral/csense/main.c b/thirdparty/nRF5_SDK_15.0.0_a53641a/examples/peripheral/csense/main.c new file mode 100644 index 0000000..645cb12 --- /dev/null +++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/examples/peripheral/csense/main.c @@ -0,0 +1,233 @@ +/** + * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +/** @file + * @defgroup capacitive_sensor_example_main main.c + * @{ + * @ingroup capacitive_sensor_example + * @brief Capacitive Sensor Example main file. + * + * This file contains the source code for a sample application that uses a capacitive sensor. + * + */ + +#include +#include +#include "boards.h" +#include "nrf_csense.h" +#include "app_error.h" +#include "nrf_drv_clock.h" +#include "app_timer.h" + +#include "nrf_delay.h" + +#include "nrf_log.h" +#include "nrf_log_ctrl.h" +#include "nrf_log_default_backends.h" + +/* Time between RTC interrupts. */ +#define APP_TIMER_TICKS_TIMEOUT APP_TIMER_TICKS(50) + +/* Scale range. */ +#define RANGE 50 + +/* Analog inputs. */ +#define AIN1 1 +#define AIN2 2 +#define AIN3 3 +#define AIN4 4 +#define AIN7 7 + +/* Definition which pads use which analog inputs. */ +#define BUTTON AIN7 +#define PAD1 AIN4 +#define PAD4 AIN4 +#ifdef NRF51 +#define PAD2 AIN2 +#define PAD3 AIN3 +#else +#define PAD2 AIN1 +#define PAD3 AIN2 +#endif + +/* Threshold values for pads and button. */ +#define THRESHOLD_PAD_1 400 +#define THRESHOLD_PAD_2 400 +#define THRESHOLD_PAD_3 400 +#define THRESHOLD_PAD_4 400 +#define THRESHOLD_BUTTON 400 + +/*lint -e19 -save */ +NRF_CSENSE_BUTTON_DEF(m_button, (BUTTON, THRESHOLD_BUTTON)); +NRF_CSENSE_SLIDER_4_DEF(m_slider, + RANGE, + (PAD1, THRESHOLD_PAD_1), + (PAD2, THRESHOLD_PAD_2), + (PAD3, THRESHOLD_PAD_3), + (PAD4, THRESHOLD_PAD_4)); +/*lint -restore*/ + + +/** + * @brief Function for starting the internal LFCLK XTAL oscillator. + * + * Note that when using a SoftDevice, LFCLK is always on. + * + * @return Values returned by @ref nrf_drv_clock_init. + */ +static ret_code_t clock_config(void) +{ + ret_code_t err_code; + + err_code = nrf_drv_clock_init(); + if (err_code != NRF_SUCCESS) + { + return err_code; + } + + nrf_drv_clock_lfclk_request(NULL); + + return NRF_SUCCESS; +} + +/** + * @brief Function for handling slider interrupts. + * + * @param[in] step Detected step. + */ +static void slider_handler(uint16_t step) +{ + static uint16_t slider_val; + if (slider_val != step) + { + NRF_LOG_INFO("Slider value: %03d.", step); + slider_val = step; + } +} + +/** + * @brief Event handler for Capacitive Sensor High module. + * + * @param [in] p_evt_type Pointer to event data structure. + */ +void nrf_csense_handler(nrf_csense_evt_t * p_evt) +{ + switch (p_evt->nrf_csense_evt_type) + { + case NRF_CSENSE_BTN_EVT_PRESSED: + break; + case NRF_CSENSE_BTN_EVT_RELEASED: + if (p_evt->p_instance == (&m_button)) + { + uint16_t * btn_cnt = ((uint16_t *)p_evt->p_instance->p_context); + (*btn_cnt)++; + NRF_LOG_INFO("Button touched %03d times.", (*btn_cnt)); + } + break; + case NRF_CSENSE_SLIDER_EVT_PRESSED: + case NRF_CSENSE_SLIDER_EVT_RELEASED: + break; + case NRF_CSENSE_SLIDER_EVT_DRAGGED: + if ((p_evt->p_instance == (&m_slider)) && (p_evt->params.slider.step != UINT16_MAX)) + { + /*lint -e611 -save */ + ((void(*)(uint16_t, uint8_t))p_evt->p_instance->p_context)(p_evt->params.slider.step, 2); + /*lint -restore*/ + } + break; + default: + NRF_LOG_WARNING("Unknown event."); + break; + } +} + +/** + * @brief Function for starting Capacitive Sensor High module. + * + * Function enables one slider and one button. + */ +static void csense_start(void) +{ + ret_code_t err_code; + + static uint16_t touched_counter = 0; + + err_code = nrf_csense_init(nrf_csense_handler, APP_TIMER_TICKS_TIMEOUT); + APP_ERROR_CHECK(err_code); + + nrf_csense_instance_context_set(&m_button, (void*)&touched_counter); + nrf_csense_instance_context_set(&m_slider, (void*)slider_handler); + + err_code = nrf_csense_add(&m_button); + APP_ERROR_CHECK(err_code); + + err_code = nrf_csense_add(&m_slider); + APP_ERROR_CHECK(err_code); +} + +/** + * @brief Function for main application entry. + */ +int main(void) +{ + ret_code_t err_code; + + err_code = NRF_LOG_INIT(NULL); + APP_ERROR_CHECK(err_code); + + NRF_LOG_DEFAULT_BACKENDS_INIT(); + + err_code = app_timer_init(); + APP_ERROR_CHECK(err_code); + + err_code = clock_config(); + APP_ERROR_CHECK(err_code); + + NRF_LOG_INFO("Capacitive sensing library example started."); + + csense_start(); + + while (1) + { + __WFI(); + NRF_LOG_FLUSH(); + } +} + +/** @} */ -- cgit v1.2.3