Skip to content

由 邦邦 贡献,Ai-Thinker 进行整理

AI-WB2 增加个按键IO08(长按、单击、双击、弹起)MultiButton

直接移植,避免重复造车,这个很赞,用到每多产品中。 <https://github.com/0x1abin/MultiButton>

简介 MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。

1.main()主函数在直接创建个任务 xTaskCreate(MultiButton_poll_Task, (char*)"MultiButton_poll_Task", 512, NULL, 14, NULL);//任务优先级数值越小,优先级越低

2.任务中定义一个按键struct Button btn1, 3.初始化IO及按键模块 5.创建一个软定时器,5ms扫描一次。 6.注册事件(本例程使用回调方式)(不使用轮询方式)

📜 点击展开完整代码
c
void MultiButton_poll_Task(void *pvParam)
{
bl_gpio_enable_input(8, 0, 1);//

button_init(&btn1, read_button_GPIO, 1, btn1_id);
button_start(&btn1);

//make the timer invoking the button_ticks() interval 5ms.
ButtonTimers = xTimerCreate("ButtonTimers",5/portTICK_PERIOD_MS,pdTRUE,( void * ) 0,vButtonTimersCallback);//pvTimerID: 软件定时器 ID,数字形式。该 ID 典型的用法是当一个回调函数分配给一个或者多个软件定时器时,在回调函数里面根据 ID 号来处理不同的软件定时器;可以用来标记定时器,表示自己是什么定时器;可以用来保存参数,给回调函数使用
xTimerStart(ButtonTimers,portMAX_DELAY);

button_attach(&btn1, SINGLE_CLICK,     BTN1_SINGLE_CLICK_Handler);               
button_attach(&btn1, DOUBLE_CLICK,     BTN1_DOUBLE_CLICK_Handler);
button_attach(&btn1, LONG_PRESS_HOLD, BTN1_LONG_PRESS_HOLD_Handler);
button_attach(&btn1, PRESS_UP,         BTN1_PRESS_UP_Handler);

vTaskDelete(NULL);
while(1)
{

}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}

需要特别注意

原理图中NC原来是没焊,晕了一会才发现。 bl_gpio_enable_input(8, 0, 1);//

GPIO8 作为 Bootstrap, 上电瞬间为高电平时,模组进入烧录模式;上电瞬间为低电平时,模组正常启动。

所以要内部拉低,按下按键时拉高 button_init(&btn1, read_button_GPIO, 1, btn1_id);

初始按键模块高电平有效。

回调主打印出,还没做实际用

📜 点击展开完整代码
c
static TimerHandle_t ButtonTimers;

static void vButtonTimersCallback(TimerHandle_t xTimer)
{
button_ticks();
}

void BTN1_SINGLE_CLICK_Handler(void* btn)
{
blog_info_user(MultiButton,"BTN1_SINGLE_CLICK_Handler");
}

void BTN1_DOUBLE_CLICK_Handler(void* btn)
{
blog_info_user(MultiButton,"BTN1_DOUBLE_CLICK_Handler");
}

void BTN1_LONG_PRESS_HOLD_Handler(void* btn)
{
blog_info_user(MultiButton,"BTN1_LONG_PRESS_HOLD_Handler");
}

void BTN1_PRESS_UP_Handler(void* btn)
{
blog_info_user(MultiButton,"BTN1_PRESS_UP_Handler");
}

原代码

上传的附件:

MultiButton.zip(242.5 KB, 下载次数: 12)

Released under the MIT License. Build Time 2026-09-11 14:52:23