ESP8266-使用ESP8266 NONOS SDK的driver/key API

ESP8266官方开发包ESP8266 NONOS SDK中有按键驱动函数,经过几天的摸索我总算知道怎么使用这些函数了。

首先看看头文件key.h有什么


#ifndef __KEY_H__
#define __KEY_H__

#include "gpio.h"

typedef void (* key_function)(void);

struct single_key_param {
    uint8 key_level;
    uint8 gpio_id;
    uint8 gpio_func;
    uint32 gpio_name;
    os_timer_t key_5s;
    os_timer_t key_50ms;
    key_function short_press;
    key_function long_press;
};

struct keys_param {
    uint8 key_num;
    struct single_key_param **single_key;
};

struct single_key_param *key_init_single(uint8 gpio_id, uint32 gpio_name, uint8 gpio_func, key_function long_press, key_function short_press);
void key_init(struct keys_param *key);

#endif

1、gpio头文件

2、一个函数指针——key_function

3、两个结构体:single_key_param和keys_param

4、两个初始化函数——key_init_single和key_init


下面分析一下结构体single_key_param:

key_level:按键触发电平(待验证)

gpio_id:引脚ID

gpio_func:引脚功能

gpio_name:引脚名

key_5s:5秒定时器,用来触发长按的事件

key_50ms:50ms定时器,用来触发短按的事件

short_press:短按的函数指针

long_press:长按的函数指针


下面分析一下keys_param结构体:

key_num:要初始化的按键数量。

single_key:指向single_key_param结构体指针的指针,也可以说是指向那个结构体数组的指针


两个初始化函数:

key_init_single:初始化按键的结构体。

key_init:初始化按键。


下面给出使用这个API的例子,本人自己写的:

void key_down50ms_func(void)
{
	os_printf("key down 50ms!\n");
}

void key_down5s_func(void)
{
	os_printf("key down 5s!\n");
}

void my_key_all_init(void)
{
	LOCAL struct keys_param key;
	LOCAL struct single_key_param *psingle_key[2];
	psingle_key[0] =
			key_init_single(GPIO_ID_PIN(4),PERIPHS_IO_MUX_GPIO4_U,FUNC_GPIO4,key_down5s_func,key_down50ms_func);
	psingle_key[1] =
			key_init_single(GPIO_ID_PIN(5),PERIPHS_IO_MUX_GPIO5_U,FUNC_GPIO5,key_down5s_func,key_down50ms_func);
	key.key_num = 2;
	key.single_key = &psingle_key[0];
	key_init(&key);
}

key_down50ms_func:短按后调用的函数

key_down5s_func:长安后调用的函数

my_key_all_nit:按键初始化,这里使用引脚4和引脚5作为按键。

你可能感兴趣的:(ESP8266)