OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4507|回复: 21

adc按键的轻触和重按的区分问题,这个问题不简单

[复制链接]

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2018-6-11 11:10:06 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 aiyeba 于 2018-6-11 15:19 编辑

adc按键的原理很简单,利用adc采集线上串联2个电阻(俩个电阻阻值不一样),而这俩个电阻每个并联一个按键,按键下去的时候,与之并联的电阻被短路了
那么,你采集的adc就有了区分,这就是adc按键的原理。(目的:为了节约单片机的IO口,理论上,还可以做更多的按键,只要adc的分辨率够高)  


现在遇到一个问题,我这里使用的是橡胶按键,也就是轻按下去,第一个按键被按下了,你在往下用点力压下去,那么,第二个按键被按下去(第一个松开了)。

也就是上面的俩个按键放到一起了。     这样造成的麻烦是,当你在重按的时候,非常容易触发轻按。这个问题非常致命。  我利用时间来处理

当检测到按键按下去的时候,在等待400ms来判断键值,结果反应很慢,其次,也不是100%的区分开了。

我和我老大说,做不了,他说可以做的,我强烈要求,轻触操作改为按键的双击,他说这是客户要求的。

不知道有谁有好的方法来一起讨论一哈。



IMG_0593.JPG

最佳答案

查看完整内容[请看2#楼]

踏破铁鞋无觅处得来全不费工夫。原来软件真的可以做到。 这里利用的是 二次延时,我还是没有明白 和一次延时的区别是什么。 这里面应该有比较深奥的东西,大家一起想想。 思路: 如果有按键 延时100ms 再次判断 如果有重按 则直接结束 如果是轻按 再次延时100ms 再次判断 是否是轻按 还可以优化应该
自己选择的路,成家前走完。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2018-6-11 11:10:07 | 显示全部楼层
踏破铁鞋无觅处得来全不费工夫。原来软件真的可以做到。    这里利用的是  二次延时,我还是没有明白 和一次延时的区别是什么。

这里面应该有比较深奥的东西,大家一起想想。

思路:   如果有按键    延时100ms     再次判断     如果有重按   则直接结束      如果是轻按     再次延时100ms   再次判断     是否是轻按      

还可以优化应该








自己选择的路,成家前走完。
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
发表于 2018-6-11 11:31:36 | 显示全部楼层
ADC按键更适合用在像琴键这种压强确实不一样的场合吧。如果只是为了区分轻触和按下,加个电容按键不是更好,摸一下就是轻触,按下机械按键就是重按
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2018-6-11 11:41:39 | 显示全部楼层
xianshasaman 发表于 2018-6-11 11:31
ADC按键更适合用在像琴键这种压强确实不一样的场合吧。如果只是为了区分轻触和按下,加个电容按键不是更好 ...

产品做成凸起的橡胶按键,目的是为了防水
自己选择的路,成家前走完。
回复

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2018-6-11 12:10:48 | 显示全部楼层
是不是这两个按键的高度差不够大。然后为什么第二个按键按下的时候,第一个按键会松开,没见过这种按键。。。
回复

使用道具 举报

0

主题

10

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1355
金钱
1355
注册时间
2016-9-7
在线时间
102 小时
发表于 2018-6-11 13:34:45 | 显示全部楼层
本帖最后由 shexg 于 2018-6-11 13:37 编辑

ADC按键,主要看各个按键按下时对应的分压值,只要分压值设置得合理、ADC精度也足够是没有问题的,但是重(zhong四声)按是实现不了的,分非你的按键是特制的:即轻按和重按时对应的电阻值有非常大(大到能够被ADC端口明显识别)的区别才可能实现。建议你用压感电阻和纯机械按键组合起来试一试看看。
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2018-6-11 13:34:46 | 显示全部楼层
wxjhby 发表于 2018-6-11 12:10
是不是这两个按键的高度差不够大。然后为什么第二个按键按下的时候,第一个按键会松开,没见过这种按键。。 ...

你可以认为是   按下去一半  adc能读到一个稳定值      完全按下去又能读到一个稳定的值

自己选择的路,成家前走完。
回复

使用道具 举报

0

主题

10

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1355
金钱
1355
注册时间
2016-9-7
在线时间
102 小时
发表于 2018-6-11 13:41:02 | 显示全部楼层
楼主用压力感应电阻替代原来的按键试一试,在压力电阻上放一个机械按键(无电气特性),当按键按下时,压感电阻值会发生变化,从而可以得到不同的分压值。
回复

使用道具 举报

0

主题

10

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1355
金钱
1355
注册时间
2016-9-7
在线时间
102 小时
发表于 2018-6-11 13:44:13 | 显示全部楼层
类似于那种压阻式传感器,不过成本价格比较敏感的应用请慎用。
回复

使用道具 举报

20

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
605
金钱
605
注册时间
2017-7-14
在线时间
116 小时
发表于 2018-6-11 13:59:05 | 显示全部楼层
这个没遇到过,但我想到的方法是和楼主一开始的解决方法一样,
现在觉得,能否去判断AD值维持的时间来判断轻按,重按?
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2018-6-11 14:43:39 | 显示全部楼层
shexg 发表于 2018-6-11 13:34
ADC按键,主要看各个按键按下时对应的分压值,只要分压值设置得合理、ADC精度也足够是没有问题的,但是重( ...

谢谢你的建议    不过现在不考虑硬件解决方案,    老大的意思就得最廉价的解决方案

软件来解决
自己选择的路,成家前走完。
回复

使用道具 举报

7

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
711
金钱
711
注册时间
2017-5-20
在线时间
96 小时
发表于 2018-6-11 15:30:50 | 显示全部楼层
    就是在短时间内,区分轻按与重按。
    楼主的意思,就是重按会触发轻按,导致误判?
    通常,按钮能在400ms内判断结果,在感受上是OK的,应该没有反应慢的感觉了吧。
“在等待400ms来判断键值”这个处理起来,可能需要技巧。
    如果我来做,每20MS检测按钮一次,判断按下,也要判断松开。
回复

使用道具 举报

3

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
266
金钱
266
注册时间
2015-8-14
在线时间
92 小时
发表于 2018-6-11 15:55:30 | 显示全部楼层
本帖最后由 tismily 于 2018-6-11 16:08 编辑

if(key)
{          key = 2; //默认轻触
     for(i = 0;i<20;i++) // 300ms左右
       {
             读取adc电压值value;
             if(value>=2)key = 1;
            
        }
}
这样行么

回复

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2018-6-12 08:50:20 | 显示全部楼层
重按按下去时,应该肯定先触发的轻按,再触发的重按吧, 这两个按键的波形是怎样的?
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-6-12 10:32:42 | 显示全部楼层
可以用定时器触发的adc再加上adc的dma传输功能。这样只需要你循环的检测dma传输的数组的值,判断其中有没有按下的并且按下的值中有没有达到重按的级别的,判断完在输出按键结果。做这个逻辑判断就可以了啊!
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2018-6-12 11:09:45 | 显示全部楼层
jinfeihan57 发表于 2018-6-12 10:32
可以用定时器触发的adc再加上adc的dma传输功能。这样只需要你循环的检测dma传输的数组的值,判断其中有没有 ...

不妥,   你这只是优化而已,没有从根本上解决问题。

现在的问题是    重按下去的一段时间里面  包含了轻触的识别  

也就是你重按在稳定前  轻触已经完成了
自己选择的路,成家前走完。
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-6-13 10:39:44 | 显示全部楼层
aiyeba 发表于 2018-6-12 11:09
不妥,   你这只是优化而已,没有从根本上解决问题。

现在的问题是    重按下去的一段时间里面  包含 ...

重按下去肯定会触发轻按的,这是你器件决定的,你又换不了。只能从逻辑上加判断啊!如果有重按忽略轻按。你只能这样,不然你就换器件。。。。。
回复

使用道具 举报

5

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2016-7-30
在线时间
82 小时
发表于 2018-6-13 10:53:46 | 显示全部楼层
松开在响应,有重按响应重按清轻按标志,没重按响应轻按,愚见
回复

使用道具 举报

19

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-9-21
在线时间
171 小时
发表于 2018-6-13 11:01:01 | 显示全部楼层
这种按键有BUG的吧,你用延时从理论上是行不通的,如果一个人用很慢的速度重按,你延时10s都是判定出错,如果可以就用短按,长按替代轻击重击,如若不行那就只能是轻击用释放作为信号,重击用点击作为信号
回复

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2018-6-13 11:03:36 | 显示全部楼层
rmrmrm 发表于 2018-6-13 10:53
松开在响应,有重按响应重按清轻按标志,没重按响应轻按,愚见

感觉这位仁兄的方法靠谱
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-6-22 01:31:19 | 显示全部楼层
aiyeba 发表于 2018-6-21 19:55
踏破铁鞋无觅处得来全不费工夫。原来软件真的可以做到。    这里利用的是  二次延时,我还是没有明白 和一 ...

2次延时,一般可以剔除一些干扰数据。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

83

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2013-3-28
在线时间
64 小时
发表于 2018-6-22 09:23:24 | 显示全部楼层
为什么要延时??而不用定时器呢?用定时器和ADC的DMA多次判断 不是能很好的解决吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 03:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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