按键防抖c语言设计,【触盘FX】关于按键防抖的想法与设计

a4c26d1e5885305701be709a3d33442f.png

这几天一直在疯狂被开叔(kai1103)的固件流轰炸,目的是测试和确定TentaPad

Fx的防抖方案。

--文字太多不想看?只看一句:触盘FX延迟超级低,会提高你的ACC,买买买!

--为什么要做防抖?因为任何微动开关在铜片触点接触的时候,都会在几ms内交替产生数个0和1(接通和不接通)的信号,被称作是“抖动”这是机械接触式的微动按键无可避免的问题,特别是久经摧残的老轴,抖动得更加厉害,所以一个良好的“防抖”方案非常必要。

默认的没优化过的GH60固件防抖逻辑都是“稳定5ms后输出”,也就是他的延迟至少是5ms+处理和传输延迟,这是一个非常不可取的方案。

我和开叔尝试过的逻辑有以下几条:

1.“稳定1ms后输出”

--疯狂双击

2.“按下直接输出,防止5ms内再次按下按键;松开直接输出,防止5ms内识别按下按键”(按键锁死方法)

--实战osu的时候滑条会无故终端,归结原因是“微动开关在完全按下的时候也可能发生抖动”。

3.“按下直接输出,抬起稳定5ms后输出”

--osu对按键的抬起判定是完全没要求,所以抬起对于osu(仅限osu、太鼓模式)来说不重要,所以有了这个想法。也更没有人能在5ms内连续按两次同一个按键。

--实战中这个固件能够很好地正常工作,但是理论上存在“抖动超过5ms”,消抖过程中肯定耗费芯片资源,所以这个逻辑能用但是并不最优。

最后确定的防抖方案:

"按下直接输出,在5ms内不允许再次按下(锁死按键状态),抬起稳定5ms后输出"(不判定为“抬起”之前这个逻辑不复位)

这个方案比方案3多出了“锁死按键状态5ms”,目的是减少芯片频繁检测抖动消耗。

--其实这个方案有些细节开叔说得我都听不懂_(:з」∠)

--开叔原话:针对osu特点的优化式防抖方案,反应迅速且完美消除抖♂动!

方案优点总结:

1.按下立刻输出,没有任何延迟。

2.综合防抖时长10ms,能很好地达到消抖作用。

3.前5ms内不检测抖动,节省资源。(大部分抖动集中在前5ms)

4.即使按键一直抖动,逻辑一样会判断为“被按下”,完全杜绝抖动对打osu的影响。

排忧:

1.osu、太鼓模式对按键的抬起没有任何判定,所以10ms的防抖时长不会对你打图造成任何影响。

2.要达到按键间隔10ms内,这个逻辑才会失效,也就是触盘两个按键交替5ms,换算过来你的点击频率要到1秒200次,也就是12000apm,换算成osu内的说法你需要打3000bmp的四分拍连打你才能使这个逻辑失效,所以完全不用担心。

缺点:

1.不适合对抬起有判定的模式使用, 例如CTB模式,MANIA模式。

实战测试:

方法→我在osu中用编辑器调慢到四分之一倍速仔细校对了10副图的offset(因为rank上去的图也不一定offset很准),然后实战试打,我打了连续两天。

结论→成效是喜人的!偏差值(正负延迟的绝对值相减)控制在了正负2ms之内!平均下来更是正负1ms不到!(例子:如果你的acc

error在-13.8~+14.2,那么绝对值相减就是13.8-14.2=0.4ms的偏差值,人体不是机器,但是多次打图获得的平均值有一定参考意义。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值