无线433判断遥控器按键弹起

                                          无线433判断遥控器按键弹起

无线433判断遥控器按键弹起

                                                图一:433遥控码波形

在使用433遥控器解码的过程中,大家是否有遇到过这个问题,在使用遥控器控制设备的亮度或者什么时,明明遥控器按键只是轻轻按了一下,亮度等级却一下跳了好几个等级,直接影响用户体验。这不用多说,一般情况下是不是按照下图二所示的方法加延时,或者判断是不同的按键按下了。加延时的方法还好,但是给用户的体验就是感觉遥控器按键不灵敏。手按快了一点就有按键没有按到。因为程序的延时还没有执行完。如果把延时调整的太短了,用户按下按键时间长一点又执行了多次了。判断不用按键的方法把,就是用户不能连续两次按同一个按键了。有人说这个用消抖的方法判断按键弹起不就好了?对的,思路是对的,但是,我们用的是遥控器啊,不是按键。其他的就不多说,有些人肯定是想着我就判断接收的遥控码,如果是有效的值,我就判断按键是在按下,不是有效的值,那就是按键弹起了。其实这样的方法也是可以,但是实现起来非常麻烦吧,我也不知道怎么实现。下面介绍一下我的方法吧!

无线433判断遥控器按键弹起

          图二:一般的消抖方法

 

 

       我的方法代码如下图三所示:RF_Value_Cnt这个是计数延时的变量,别问我为什么用这种变量名,我也忘了当时我是怎么想的。key_once就是判断按键弹起变量,当时想的是这样这个变量用于控制按键只按一次,就想到了这个名。这里的思路遥控器没有按键按下时,key_once就会为0,RF_Value_Cnt这个变量消抖,但是可有可无,这里是在测试时长按的过程中手抖了一下,按键就变按两次了,所以加了这个条件消抖。所以这个条件加了会更好一些。但是这不是核心的,核心的是怎么判断遥控器没有按键按下。

无线433判断遥控器按键弹起

                                           图三:按键弹起的判断方法

       图四是没有按键按下时的433信号波形,发现有些波形跟遥控器按下时的波形很相似,这个我们不会理他,因为对我们有用的是图中红色椭圆标记的低电平,这些低电平的时间都是小于50us的,这就有解决办法了吧?没错,因为遥控器信号的低电平一般都高于100us的,这是我们就把低于50us的低电平作为按键弹起的标记,当接收到低于50us的低电平时,就可以认定是遥控器按键弹起了,就把key_once置0。这样遥控器按键按下后,控制器收到遥控码,把key_once置1,按键没有放开,key_once都不会变为0,也就不会重复执行多次按键了。而且这样用户快速按按键时也不会有按不到的情况,灵敏度杠杠的。好了,上代码截图,如下图五所示。

无线433判断遥控器按键弹起

                                      图四:无按键按下时的433信号波形

无线433判断遥控器按键弹起

                                                                              图五:接收码处理函数(不完整)