开源按键组件Multi_Button的使用,含测试工程

这篇具有很好参考价值的文章主要介绍了开源按键组件Multi_Button的使用,含测试工程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开源按键组件Multi_Button的使用,含测试工程

之前的文章中介绍过按键的处理方法《多功能(单击、双击、长按)按键设计》,今天再来分享另外一种方式:MultiButton。

1.Multi_Button简介

MultiButton 是Github上的一个开源的按键处理组件,作者0x1abin。

GIthub地址:https://github.com/0x1abin/MultiButton

开源按键组件Multi_Button的使用,含测试工程

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

按键支持的事件包括:

开源按键组件Multi_Button的使用,含测试工程

2.Multi_Button的使用

模块只有两个文件multi_button.c和multi_button.h,使用时,将.c文件添加到工程中。这里以STM32为例。

    2.1.包含头文件#include"multi_button.h"

    2.2.定义按键结构体和按键ID,这里定义了2个按键:

Button button1;
Button button2;


#define btn1_id  1
#define btn2_id  2

   2.3.编写一个读取按键GPIO电平的函数

uint8_t read_button_GPIO(uint8_t button_id)
{
  // you can share the GPIO read function with multiple Buttons
  switch(button_id)
  {
    case btn1_id:
      return HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin);
      break;
    case btn2_id:
      return HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin);
      break;
    default:
      return 0;
      break;
  }
}

    2.4.初始化按键对象

button_init(&button1, read_button_GPIO, 0, btn1_id);
button_init(&button2, read_button_GPIO, 0, btn2_id);

    在button_init函数中:

    第一个参数为2.2中定义的按键结构体指针。

    第二个参数为绑定的2.3中编写的读取按键GPIO电平的函数。

    第三个参数为按键的有效电平,0代表低电平有效,1代表高电平有效。

    第四个参数为按键ID。

    2.5.绑定按键回调函数:       

button_attach(&button1, PRESS_DOWN,       BTN_PRESS_DOWN_Handler);
button_attach(&button1, PRESS_UP,         BTN_PRESS_UP_Handler);
button_attach(&button1, PRESS_REPEAT,     BTN_PRESS_REPEAT_Handler);
button_attach(&button1, SINGLE_CLICK,     BTN_SINGLE_Click_Handler);
button_attach(&button1, DOUBLE_CLICK,     BTN_DOUBLE_Click_Handler);
button_attach(&button1, LONG_PRESS_START, BTN_LONG_PRESS_START_Handler);
button_attach(&button1, LONG_PRESS_HOLD,  BTN_LONG_PRESS_HOLD_Handler);
      
button_attach(&button2, PRESS_DOWN,       BTN_PRESS_DOWN_Handler);
button_attach(&button2, PRESS_UP,         BTN_PRESS_UP_Handler);
button_attach(&button2, PRESS_REPEAT,     BTN_PRESS_REPEAT_Handler);
button_attach(&button2, SINGLE_CLICK,     BTN_SINGLE_Click_Handler);
button_attach(&button2, DOUBLE_CLICK,     BTN_DOUBLE_Click_Handler);
button_attach(&button2, LONG_PRESS_START, BTN_LONG_PRESS_START_Handler);
button_attach(&button2, LONG_PRESS_HOLD,  BTN_LONG_PRESS_HOLD_Handler);

这里绑定了所有的按键功能,用户可根据实际需求进行删减。不同的按键回调函数可以相同,以按键按下的回调函数为例,函数如下:

void BTN_PRESS_DOWN_Handler(void* btn)
{
       Button *temp_button = (Button *)btn;
       switch(temp_button->button_id)
       {
              case btn1_id:
                     printf("btn1 press down\r\n");
                     break;
              case btn2_id:
                     printf("btn2 press down\r\n");
                     break;
              default:
                     break;
       }
}

    2.6.调用启动函数

button_start(&button1);
button_start(&button2);

    2.7.最后,需要在一个定时任务中循环调用按键扫描函数:

void scan_key()
{
       if(key_tick < TICKS_INTERVAL)return;
       key_tick = 0;
       button_ticks();
}

    需要注意的是,按键的扫描周期、长按、短按、双击的时间定义可以在.h文件中修改:

//According to your need to modify the constants.
#define TICKS_INTERVAL    10       //ms
#define DEBOUNCE_TICKS    3       //MAX 8
#define SHORT_TICKS       (300 /TICKS_INTERVAL)
#define LONG_TICKS        (1000 /TICKS_INTERVAL)

    最后来测试一下效果,按键的按下、弹起、单击、双击、长按等都能被检测到,用起来还是挺方便的。

开源按键组件Multi_Button的使用,含测试工程

这个开源按键模块的源代码只有200行左右,有兴趣的朋友可以自己研究一下。

测试工程链接:

链接:https://pan.baidu.com/s/1wiw5Ajoooc7WZFgwO87zqw

提取码:wola

推荐阅读:

ITM机制-不用串口也能printf

多功能(单击、双击、长按)按键设计

怎样测量单片机程序的运行时间?

调试程序时怎样查看变量波形?看这里

   欢迎关注公众号"嵌入式技术开发",大家可以后台给我留言沟通交流。如果觉得该公众号对你有所帮助,也欢迎推荐分享给其他人。文章来源地址https://www.toymoban.com/news/detail-401635.html

到了这里,关于开源按键组件Multi_Button的使用,含测试工程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【微信小程序】button和image组件的基本使用

    ✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:微信小程序🥇 💬个人格言:不断的翻越一座又一座的高山,那样的人生才是我想要的。这一马平川,一眼见底的活,我不想要,我的人生,我自己书写,余生很长,

    2024年02月09日
    浏览(153)
  • Android应用开发(7)按键(Button)

    Android应用开发学习笔记——目录索引 本章介绍按钮(Button)控件的常见用法,结合前面Android应用开发(5)文本显示(TextView)介绍按钮(Button)监听点击和长按事件,禁用和启用等。 参考google官网:https://developer.android.com/reference/android/widget/Button 按钮控件Button由TextView派生

    2024年02月05日
    浏览(54)
  • 显示器与按键(LCD 1602 + button)

    一、实验目的: (1)学习lcd 1602的编程与使用、 (2)机械式复位开关button软件消抖的方法。 二、实验内容: 1、必做:先显示开机画面,:在1602显示器上,分两行分别居中显示字符“  AHAU  CHINA  ” 和 \\\"  I LOVE YOU  \\\"。然后从右向左移动直至消失。其中1602的rs、rw、en引脚分

    2024年02月03日
    浏览(45)
  • 【Unity3D】button组件无法使用onclick与image组件无法改变属性(如fillAmount等)的解决办法

    如果你遇到了:    AssetsScriptsGame.cs(37,16): error CS0079: The event \\\'Button.onClick\\\' can only appear on the left hand side of += or -= ArgumentException: GetComponent requires that the requested component \\\'Button\\\' derives from MonoBehaviour or Component or is an interface. UnityEngine.GameObject.GetComponent[T] () 检查一下编译器是否给你

    2024年02月15日
    浏览(53)
  • STM32按键消抖的几种实现方式-STM32 Button Debouncing

    按键按下和松开的时候,按键金属片之间的贴合、分离有一个过程。给STM32输入的信号并不是理想的0和1切换的过程。而是如下图所示的,按下和松开的一小段时间内按键信号出现抖动( jitter ),这种现象称为按键抖动( Button Bouncing )。为了避免程序上出现误动作,需要从

    2024年01月15日
    浏览(39)
  • 【微信小程序】使用button组件来实现一个带有点击效果的按钮,按钮中间添加一个大的+号图标

    在微信小程序中,你可以使用 button 组件来实现一个带有点击效果的按钮,并在按钮中间添加一个大的+号图标。以下是一个示例代码: 在上述代码中,我们使用了微信小程序的 button 组件,并在其中添加了一个 text 组件,文本内容为+号。使用类名为 button 的样式设置了按钮的

    2024年02月16日
    浏览(64)
  • 【嵌入式】使用MultiButton开源库驱动按键并控制多级界面切换

    目录 一 背景说明 二 参考资料 三 MultiButton开源库移植 四 设计实现--驱动按键 五 设计实现--界面处理         需要做一个 通过不同按键控制多级界面切换以及界面动作 的程序。         查阅相关资料,发现网上大多数的应用都比较繁琐,且对于多级界面的切换逻辑可读

    2024年02月07日
    浏览(61)
  • VUE中使用ElementUI组件的单选按钮el-radio-button实现第二点击时取消选择的功能

    页面样式为: html 代码为: js代码为:(记得在data中声明loglevel:\\\"\\\")

    2024年02月15日
    浏览(50)
  • 【嵌入式开源库】MultiButton的使用,简单易用的事件驱动型按键驱动模块

    MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。 本章使用环境: 正点原子stm32F4探索者 代码工程使用正点原子HAL库实验三-按键输

    2024年02月02日
    浏览(55)
  • Flutter组件--按钮(Button)组件

      属性  说明 onPressed 必填参数,按下按钮时触发的回调,接收一个方法,传null表示按钮禁用,会显示禁用相关样式 child 子组件 style 通过ButtonStyle装饰 ButtonStylee里面的常用的参数 属性名称 值类型  属性值 foregroundColor Color 文本颜色 backgroundColor Color 按钮的颜色 shadowColor Col

    2024年02月14日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包