搜索
bottom↓
回复: 23
打印 上一主题 下一主题

求助:如何识别两个独立按键同时按下的组合按键?

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2015-5-14 13:24:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
利用马老师的状态机,现在分别能够实现两个独立按键的长按和短按。
但是我思考了很久,尝试了很多方法就是弄不出两个独立按键同时按下的方法。

简单的利用按键点LED来讲吧。
KEY_1控制LED1,LED2,LED3
KEY_2控制LED4,LED5,LED6
KEY_1和KEY_2同时按下时,控制LED7
现在已经实现的是:
KEY_1短按切换LED1——LED3,长按快速切换
KEY_2短按切换LED4——LED6,长按快速切换

但两个同时按下该如何触发?求各位利用马老师的状态机指点!

出0入0汤圆

2
发表于 2015-5-14 13:41:42 | 只看该作者
马老师的没看过,用与运算可以不?好比检测到两个按键都按下

出0入0汤圆

3
 楼主| 发表于 2015-5-14 14:02:40 | 只看该作者
黑夜之狼 发表于 2015-5-14 13:41
马老师的没看过,用与运算可以不?好比检测到两个按键都按下

我试过
用Key_1&&Key_2

但是这样还是会检测到有一个先按下,一个后按下。

出0入0汤圆

4
发表于 2015-5-14 14:06:23 | 只看该作者
加延时,延时内检测第二按键。

出0入4汤圆

5
发表于 2015-5-14 14:40:36 | 只看该作者
两键按下的先后要把控很准,技术活啊

出0入0汤圆

6
发表于 2015-5-14 15:15:17 | 只看该作者
用状态机的话,每个按键的状态机都要独立吧,在按键1的一种状态下,按键2的任何状态都可能出现

出0入0汤圆

7
发表于 2015-5-14 15:25:17 | 只看该作者
sos9616 发表于 2015-5-14 14:02
我试过
用Key_1&&Key_2

你是要同时验证先后的吗?

出20入26汤圆

8
发表于 2015-5-14 17:42:54 | 只看该作者
嗯,用马老师的状态机怎么弄,同问

出0入0汤圆

9
 楼主| 发表于 2015-5-14 18:04:15 | 只看该作者
sunliezhi 发表于 2015-5-14 14:40
两键按下的先后要把控很准,技术活啊

希望你能指点一下。万分感谢!

出0入0汤圆

10
 楼主| 发表于 2015-5-14 18:21:38 | 只看该作者
我自己突然想到一种方法,就是说组合按键和双击按键,好像原理是差不多。
比如把key_1双击瓦解开来,就是key_1在一定的时间内按两次。
若把双击想象成组合按键,那就是第一次key_1按下,然后在规定时间内第二次key_2按下,构成一个组合按键,是不是等同于上面的按键双击。
各位坛友觉得呢?

出0入4汤圆

11
发表于 2015-5-14 18:57:55 | 只看该作者
本帖最后由 sunliezhi 于 2015-5-14 19:04 编辑
sos9616 发表于 2015-5-14 18:04
希望你能指点一下。万分感谢!


指点不敢当,
7楼 jswd0810 说到了常用的思路
我临时想到一个方法,有待验证:   
                                          处理按键有2种方式:1.  按键松开前就执行按键功能
                                                                         2.  待键松开后才执行按键功能;
                          如果你不想用一个键专门作为组合键的特别功能,可以考虑第2中方式,即“待键松开后执行按键功能”
                          在确认态的下一态判断
                                                  if (KeyCurr == KeyLast)  {//  一个键按下, 没松开就不管它
                                                  {
                                                          计数以便后面判断长、短按
                                                  } else {
                                                          if (KeyCurr == NO_KEY) //键松开了
                                                           {
                                                                  根据时间长短判断是短按还是长按
                                                                  回到初始态
                                                            } else {
                                                                      这里就是加按了一个键了,
       仅是思路,逻辑需要仔细斟酌!

出0入0汤圆

12
发表于 2015-5-14 19:55:20 | 只看该作者
  用层次式状态机可以解决这个问题。

出0入0汤圆

13
发表于 2015-5-14 20:44:02 | 只看该作者
brieve 发表于 2015-5-14 19:55
用层次式状态机可以解决这个问题。

第一次听说层次状态机,涨姿势了,能否具体讲解一下

出0入0汤圆

14
发表于 2015-5-14 21:58:44 | 只看该作者
机器人天空 发表于 2015-5-14 20:44
第一次听说层次状态机,涨姿势了,能否具体讲解一下

  我是看 量子框架中学到的,也是正在学习中。
  推荐看看 UML 状态图的实用 C/C++设计(第二版) ,论坛中以前推荐过,书中有个例子(pc键盘的例子)和这个需求很像,也是说组合按键处理的问题,里面使用里层次状态机正交编码的设计,我觉得非常适合处理这种问题。
  
层次式状态机我的理解就是引入了类似子类和父类的类似概念。如果某一个状态不需要处理某一个事件,层次状态机不会忽略这个事件,而是会返回到根状态让它去处理,这样设计上可以更加简洁,而且可以高效的实现很复杂的逻辑。
  
  你看看这个讨论 http://www.amobbs.com/thread-5506209-1-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

15
 楼主| 发表于 2015-5-15 09:49:11 | 只看该作者
jswd0810 发表于 2015-5-14 15:10
楼上说得有道理,看来楼主要单独引入一个键,类似于键盘的ctrl这样的单按无作用,只有组合才有用的 ...

不行呀,就两个按键。

没有引导键。。

出4375入62汤圆

16
发表于 2015-5-15 11:07:12 | 只看该作者
你看看密码锁是怎么做的

出0入0汤圆

17
 楼主| 发表于 2015-5-15 13:16:15 | 只看该作者
supercoo 发表于 2015-5-15 11:07
你看看密码锁是怎么做的

谢谢你的建议,但你能提供密码锁相关的资料吗?或者你可以讲讲你的解题思想。

出0入0汤圆

18
发表于 2015-5-16 15:20:43 | 只看该作者
brieve 发表于 2015-5-14 21:58
我是看 量子框架中学到的,也是正在学习中。
  推荐看看 UML 状态图的实用 C/C++设计(第二版) ,论坛 ...

三克油,

出0入0汤圆

19
发表于 2015-5-17 22:53:25 来自手机 | 只看该作者
是不是可以将key1及key2同时按下,定义为key3,然后再转入状态机内判断,优先级大于key1,key2

出30入0汤圆

20
发表于 2015-5-18 13:41:40 来自手机 | 只看该作者
我以前用51的时候,3×4的键盘,设1个↑键当复合键用。查表方法识别。

出0入0汤圆

21
发表于 2016-2-19 23:31:32 来自手机 | 只看该作者
看下吴坚鸿的单片机帖子有程序实现。

出0入0汤圆

22
发表于 2016-4-7 12:17:09 | 只看该作者
我目前也遇到这个问题。4个独立按键,有一个辅助键,用来与其他键同时按下做组合键。感觉如果用状态机的话,每一个都要独立的状态机吧?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 07:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表