murphyzhao / flexiblebutton Goto Github PK
View Code? Open in Web Editor NEW灵活的按键处理库(Flexible Button)| 按键驱动 | 支持单击、双击、连击、长按、自动消抖 | 灵活适配中断和低功耗 | 按需实现组合按键
License: Apache License 2.0
灵活的按键处理库(Flexible Button)| 按键驱动 | 支持单击、双击、连击、长按、自动消抖 | 灵活适配中断和低功耗 | 按需实现组合按键
License: Apache License 2.0
我用的是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” 事件。
请问有什么办法实现么?
@murphyzhao 你好,有一个疑问想请教下,关于按下事件<FLEX_BTN_PRESS_DOWN>的检测部分我看了好像没有防抖的设计,从代码实现上,只要检测按键按下就立即返回事件,是否应该检测到按键在按下状态持续一段时间后再报按下事件?
按照DEMO的时序是 在 init初始化 flex_button_register 注册好按键,然后开启线程button_scan 进行扫描,这个肯定没问题
如果在其它应用调用 flex_button_register , 会和 button_scan 有线程安全问题?,导致加入按键链表有的 按键 结构体数据可能不完整,被button_scan 打断,导致有问题
加下这两个函数互斥应该完美点。。。
最新版好像回调事件里的按键id和注册时的顺序是反的?
假设一个按键,我既要使用其短按事件,又要使用其长按事件,则应该短按时只触发短按事件,长按时只触发长按事件。然而目前的设计是:长按过程中会触发一次短按事件,我觉得这是非常不合理的!!!
个人认为这里是疏漏了,请作者确认一下
比如,智能灯,用手指滑动方式,调节亮度
目前需要同时长按四个按键来处理事件,发现当同时按住四个按键时,无法正常回调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))
{
//
}
你好,请问支持触摸按键吗
能否支持3连击 按键
你好,我想问一下。flexible_button.h中,1000/FLEX_BTN_SCAN_FREQ_HZ的值,需要与flex_button_scan()函数轮序调用间隔的时间保持一致吗?
你好,请问一下这个怎么改一下增加按键的连续触发,这个在调时钟的时候很方便
情况1:一组按键都是不需要双击等功能的。
情况2:一组按键只有一个需要双击等功能的。
情况3:可以任意定义任意按键需要支持哪几种功能的。
可以采用宏开关设置,可以节省系统开销。
建议把状态用枚举值来代替,方便理解
if (!button || (button_cnt > sizeof(btn_type_t) * 8))
{
return -1;
}
看到这里,似乎有数量限制,只支持32个按键,麻烦解答一下,谢谢。
才开始搞这样的编程,想试试这个函数库。我用的51单片机。有3个按键,支持单击,常按2种模式。
flex_button_register()中第54行条件判断中,应该是||而不是&&
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个就会有问题,里面一些局部变量的类型也需要修改
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.