玩转RT-Thread系列教程(5)--MultiButton-可以无限拓展按键的组件

16 篇文章 6 订阅
14 篇文章 6 订阅

玩转RT-Thread系列教程(5)–MultiButton-可以无限拓展按键的组件

一、MultiButton介绍

MultiButton设计思想

1.1:面向对象思想

MultiButton中每个按键都抽象为了一个按键对象,每个按键对象是独立的,系统中所有的按键对象使用单链表串起来。

其中在变量后面跟冒号的语法称为位域,使用位域的优势是节省内存。

第一次插入时,因为head_hanler 为 NULL,所以只需要执行while之后的代码.

如果再插入一个buuton2按键对象:

1.2:状态机处理思想
  1. 读取当前引脚状态

  1. 读取之后,判断当前状态机的状态,如果有功能正在执行(state不为0),则按键对象的tick值加1(后续一切功能的基础)

  1. 按键消抖(连续读取3次,15ms,如果引脚状态一直与之前不同,则改变按键对象中的引脚状态)

  1. 状态机

—MultiButton参考Mculover666教程,感谢大佬让我学习到很多。

二、添加软件包

1.menuconfig

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.更新下载软件包

在这里插入图片描述

3.生成mdk工程

在这里插入图片描述

4.添加button_app.c

在这里插入图片描述

三、示例使用

1.查看电路原理图

在这里插入图片描述

在这里插入图片描述

2.在Button_APP.c中添加按键驱动

#include "button_app.h"

extern struct key_state_type key0;
extern struct key_state_type key1;

static Button_t button_0;
static Button_t button_1;

//read button 0 level
uint8_t button0_read_level(void)
{
    return rt_pin_read(KEY_0);
}

//button 0 down callback
void button0_down_callback(void *btn)
{
    key0.down_state = KEY_PRESS;
}

// button 0 long callback
void button0_double_callback(void *btn)
{
    key0.double_state = KEY_PRESS;
}

// button 0 long callback
void button0_long_callback(void *btn)
{
    key0.long_state = KEY_PRESS;
}

//read button 1 level
uint8_t button1_read_level(void)
{
    return rt_pin_read(KEY_1);
}
//button1 down callback
void button1_down_callback(void *btn)
{
    key1.down_state = KEY_PRESS;
}
// button1 long callback
void button1_double_callback(void *btn)
{
    key1.double_state = KEY_PRESS;
}
// button 1 long callback
void button1_long_callback(void *btn)
{
    key1.long_state = KEY_PRESS;
}

void key_process(void)
{
    Button_Process();
}

int	key_init(void)
{
    //button gpio init
    rt_pin_mode(KEY_0, PIN_MODE_INPUT_PULLUP);
    rt_pin_mode(KEY_1, PIN_MODE_INPUT_PULLUP);

    //button create
    Button_Create("button_0", &button_0, button0_read_level, PIN_LOW);
    Button_Create("button_1", &button_1, button1_read_level, PIN_LOW);

    //set button callback
    Button_Attach(&button_0, BUTTON_DOWM, button0_down_callback);
    Button_Attach(&button_0, BUTTON_DOUBLE, button0_double_callback);
    Button_Attach(&button_0, BUTTON_LONG, button0_long_callback);

    Button_Attach(&button_1, BUTTON_DOWM, button1_down_callback);
    Button_Attach(&button_1, BUTTON_DOUBLE, button1_double_callback);
    Button_Attach(&button_1, BUTTON_LONG, button1_long_callback);

    return RT_EOK;
}

INIT_APP_EXPORT(key_init);

3.按键功能编写
//定义key 控制块
struct key_state_type key0 = { 0 };
struct key_state_type key1 = { 0 };

int main(void)
{
    while(1)
    {
        key_process();
				
        if(key0.double_state == KEY_PRESS)
        {
            rt_kprintf("key0 is double_pass\n");
						key0.double_state = KEY_RELEASE;
        }
        else if (key0.long_state == KEY_PRESS)
        {
            rt_kprintf("key0 is long_pass\n");
						key0.long_state = KEY_RELEASE;
        }
				
        if(key1.double_state == KEY_PRESS)
        {
            rt_kprintf("key1 is double_pass\n");
						key1.double_state = KEY_RELEASE;
        }
        else if (key1.long_state == KEY_PRESS)
        {
            rt_kprintf("key1 is long_pass\n");
						key1.long_state = KEY_RELEASE;
        }
				
				rt_thread_mdelay(10);
    }
}
4.编译、下载、查看

可以看到我们的按键双击,长按释放事件已经得到响应。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: RT-Thread Studio是一个基于Eclipse的集成开发环境,用于开发和调试RT-Thread实时操作系统。以下是RT-Thread Studio的安装教程: 1. 下载RT-Thread Studio安装包,可以从RT-Thread官网下载。 2. 解压安装包,双击“rt-thread-studio.exe”文件,开始安装。 3. 选择安装路径,点击“下一步”。 4. 选择安装组件,建议选择全部组件,点击“下一步”。 5. 选择安装类型,建议选择“完全安装”,点击“下一步”。 6. 等待安装完成,点击“完成”。 7. 打开RT-Thread Studio,选择“新建项目”。 8. 选择“RT-Thread Project”,输入项目名称和路径,点击“下一步”。 9. 选择开发板类型和芯片型号,点击“下一步”。 10. 配置项目选项,包括内核选项、驱动选项、文件系统选项等,点击“下一步”。 11. 点击“完成”,项目创建成功。 12. 编写代码,进行编译、下载和调试。 以上就是RT-Thread Studio的安装教程,希望对您有所帮助。 ### 回答2: rt-thread studio是一款全新的开发工具,旨在为嵌入式开发者提供一个可视化、简化、高效的开发环境。它集成了rt-thread实时操作系统、MDK-ARM编译器、工程管理、代码生成、调试支持等功能,使得开发者可以在一个工具中完成从工程代码编写到调试的全部流程。 首先,我们需要下载rt-thread studio的安装包。在rt-thread官网(https://www.rt-thread.org/)的下载页面中,可以找到rt-thread studio的安装包。我们可以根据自己的操作系统选择相应的版本进行下载。 完成下载后,我们需要进行安装。具体步骤如下: Step 1:运行安装程序 双击rt-thread studio的安装包,运行安装程序。接着,我们需要选择安装路径和安装组件。一般情况下,我们不需要修改默认的安装路径和组件。 Step 2:选择安装组件 在安装组件的界面中,我们可以选择需要安装的组件。如果我们仅仅需要rt-thread studio的开发环境,可以只选择“rt-thread studio”组件;如果我们需要在rt-thread studio中直接使用Keil MDK-ARM来进行编译和调试,可以选择“Keil MDK-ARM插件”组件。当然,我们也可以选择安装全部组件。 Step 3:安装 在选择完安装组件后,我们可以开始安装了。单击“安装”按钮后,安装程序会开始复制文件并进行必要的配置。整个安装过程可能需要一些时间,取决于计算机的性能和选择的安装组件数量。 Step 4:完成安装 等待安装程序完成所有的文件复制和配置后,安装程序会自动退出。此时,我们就已经完成了rt-thread studio的安装。 总的来说,rt-thread studio的安装过程非常简单,只需要遵循上述步骤即可完成。安装完毕后,就可以开始在rt-thread studio中进行rt-thread实时操作系统的开发了。 ### 回答3: RT-Thread Studio 是一款开源的嵌入式开发工具,它包含了各种编程语言和编辑器,可用于嵌入式软件开发和编译。本教程将介绍 RT-Thread Studio的安装步骤。 步骤 1:下载 RT-Thread Studio 软件包 在RT-Thread Studio官网上下载所需的 RT-Thread Studio 软件包,最新版为 RT-Thread Studio 3.1.3,选择与自己的操作系统相对应的版本下载。 步骤 2:解压软件包 下载完成后打开压缩包,将其中的文件解压到一个文件夹中。 步骤 3:运行 RT-Thread Studio 在文件夹内找到 RT-Thread Studio 的可执行文件,并运行。如果是第一次运行 RT-Thread Studio,软件会自动提示需要安装JDK和工具链,按照提示进行安装即可。 步骤 4:创建新项目 打开软件后,进入新建项目界面,选择所需的项目类型,填写项目名称和存储路径,点击创建即可。 步骤 5:编写代码 在新建项目后,就可以开始编写代码了。使用 RT-Thread Studio 内置的编辑器可以编写 C、C++、Python 等语言的代码,并可进行语法高亮、自动补全等操作。 步骤 6:编译项目 完成代码编写后,可以进行编译操作。点击菜单栏中的“编译”,RT-Thread Studio 会自动将代码编译为可执行文件,然后生成相应的 .map、.bin 等文件。 步骤 7:下载程序 下载程序到设备中可以使用USB下载器或者JTAG下载器,然后将设备连接到电脑上,选择下载及调试选项,RT-Thread Studio 就可以将程序下载到设备中了。 总结: 以上就是 RT-Thread Studio 的安装教程,相信通过本教程的介绍,大家对 RT-Thread Studio 的基本操作都有了一定的了解。它是一款十分实用和易用的嵌入式开发工具,适合用于各类嵌入式软件开发和编译。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值