1.1 软件平台:sdk14.2
1.2 硬件平台: nrf52832
说明:
只是介绍代码怎么使用,直接点
QQ: 1297311998 ,如果有什么问题,请高手不吝赐教
static uint8_t key_timeout_enable = 0;
APP_TIMER_DEF(check_key_timer);
static void check_key_timeout(void * p_context)
{
key_timeout_enable = 1;
}
// 初始化按键检测定时器
void init_check_key_timer(void)
{
ret_code_t err_code;
err_code = app_timer_create(&check_key_timer,
APP_TIMER_MODE_SINGLE_SHOT,
check_key_timeout);
APP_ERROR_CHECK(err_code);
}
/*****************************************************
*function : start_key_timer
*****************************************************/
void start_check_key_timer(uint8_t type)
{
ret_code_t err_code;
if(type == true)
{
err_code = app_timer_start(check_key_timer,
APP_TIMER_TICKS(500),
NULL);
APP_ERROR_CHECK(err_code);
}
else if(type == false)
{
app_timer_stop(check_key_timer);
}
}
#define keyPin 26 // 按键 io
/*****************pin io gpiote*****************************/
void pin_hand(nrf_drv_gpiote_pin_t pin_no, nrf_gpiote_polarity_t action)
{
if(nrf_gpio_pin_read(keyPin)==0)
{
// 中断进来-----执行用户函数
start_check_key_timer(true);
}
}
/**********************************************
*funtion :key_ledInit
*description : init led and key; key use gpiote driver
**********************************************/
void key_ledInit(void)
{
// clear gpiote
if (!nrf_drv_gpiote_is_init())
{
nrf_drv_gpiote_init();
}
nrf_drv_gpiote_in_config_t config = GPIOTE_CONFIG_IN_SENSE_TOGGLE(false);
config.pull = NRF_GPIO_PIN_PULLUP,
config.sense = NRF_GPIOTE_POLARITY_HITOLO;
nrf_drv_gpiote_in_init(keyPin,&config,pin_hand);
nrf_drv_gpiote_in_event_enable(keyPin,true);
}
按键检测函数,放在mian 函数while
void check_device_key(void)
{
static uint8_t key_Valid = false;
if(key_timeout_enable==0) return;
key_timeout_enable = 0;
BLE_RTT("key_time_count %d\r\n",key_time_count);
if(0==nrf_gpio_pin_read(KEY_PIN))
{
key_Valid = true;
}
else
{
key_time_count = 0;
key_Valid = false;
}
if(key_Valid == true) // °´¼ü»¹ÔÚ
{
if(++key_time_count>=long_key_time) // long key
{
key_Valid = false;
key_pressed_count = 0;
key_time_count = 0;
start_check_key_timer(false);
BLE_RTT("device long key %d\r\n",long_key_enable)
}
}
else //if(key_time_count<=short_key_time)// short key
{
key_pressed_count = 0;
key_time_count = 0;
start_check_key_timer(false);
BLE_RTT("device short_key %d\r\n",short_key);
key_Valid = false;
}
}