Giter Site home page Giter Site logo

murphyzhao / flexiblebutton Goto Github PK

View Code? Open in Web Editor NEW
644.0 25.0 282.0 68 KB

灵活的按键处理库(Flexible Button)| 按键驱动 | 支持单击、双击、连击、长按、自动消抖 | 灵活适配中断和低功耗 | 按需实现组合按键

License: Apache License 2.0

Python 2.33% C 97.67%
button rt-thread iot-board flexiblebutton flex-button

flexiblebutton's Issues

逻辑错误

flex_button_register()中第54行条件判断中,应该是||而不是&&

注册按键数量问题

if (!button || (button_cnt > sizeof(btn_type_t) * 8))
{
return -1;
}
看到这里,似乎有数量限制,只支持32个按键,麻烦解答一下,谢谢。

按下事件<FLEX_BTN_PRESS_DOWN>的防抖

@murphyzhao 你好,有一个疑问想请教下,关于按下事件<FLEX_BTN_PRESS_DOWN>的检测部分我看了好像没有防抖的设计,从代码实现上,只要检测按键按下就立即返回事件,是否应该检测到按键在按下状态持续一段时间后再报按下事件?

按键处理数量限制

static unsigned char trg = 0;
static unsigned char cont = 0;
static uint8_t keydata = 0xFF;
static uint8_t key_rst_data = 0xFF;
static uint8_t button_cnt = 0;

目前这些标记量都是uint8_t类型的,也就是最多支持8个按键,超过8个就会有问题,里面一些局部变量的类型也需要修改

长按事件的组合按键问题

两个按键按下可能会存在点时间差,所以获取两个组合的长按事件 会先触发某个按键的长按事件 再触发组合按键长按事件,再触发剩下一个长按事件。
代码如下:
image
结果如下:
image

关于按键ID

最新版好像回调事件里的按键id和注册时的顺序是反的?

中断方式检测按键

我用的是STM32F103芯片裸机编程,目前在使用该库进行中断方式检测按键出现了问题,请求大家的帮助。问题如下:

  • 我已成功地配置了按键的外部中断,并且每次按下按键后会进入中断处理函数

  • 我试过在中断处理函数里释放一个信号量,在main函数的while循环里检测到该信号量后调用flex_button_scan()函数,能够正常识别 “FLEX_BTN_PRESS_CLICK” 和点击 “FLEX_BTN_PRESS_DOUBLE_CLICK” 。

  • 但是由于按一下按键才会调用扫描函数,当我试图触发 “FLEX_BTN_PRESS_SHORT_START” 和 “FLEX_BTN_PRESS_LONG_START” 事件时,我长按按键,这只触发一次中断,只调用一次flex_button_scan()函数,只产生了 “FLEX_BTN_PRESS_DOWN” 事件。

  • 请问有什么办法实现么?

非常不合理的设计:短按事件和长按事件相关联

假设一个按键,我既要使用其短按事件,又要使用其长按事件,则应该短按时只触发短按事件,长按时只触发长按事件。然而目前的设计是:长按过程中会触发一次短按事件,我觉得这是非常不合理的!!!

同时按住四个按键出现卡顿并无法正常回调?

目前需要同时长按四个按键来处理事件,发现当同时按住四个按键时,无法正常回调common_btn_evt_cb并出现卡顿现象,是在common_btn_evt_cb中通过如下接口来实现的
if ((flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_LONG_HOLD) &&
(flex_button_event_read(&user_button[USER_BUTTON_1]) == FLEX_BTN_PRESS_LONG_HOLD) &&
(flex_button_event_read(&user_button[USER_BUTTON_2]) == FLEX_BTN_PRESS_LONG_HOLD) &&
(flex_button_event_read(&user_button[USER_BUTTON_3]) == FLEX_BTN_PRESS_LONG_HOLD))
{
//
}

有考虑过 flex_button_register 和 button_scan 线程安全

按照DEMO的时序是 在 init初始化 flex_button_register 注册好按键,然后开启线程button_scan 进行扫描,这个肯定没问题


如果在其它应用调用 flex_button_register , 会和 button_scan 有线程安全问题?,导致加入按键链表有的 按键 结构体数据可能不完整,被button_scan 打断,导致有问题

加下这两个函数互斥应该完美点。。。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.