特定环境下的C知识点应用

今天看微信公众号文章,看到一条C语言相关的知识,关于将某个符号赋值给某个变量的,正巧我今天上午做的事和这个有相同之处,因此记录一下自己此时的想法。

特定环境下的C知识点应用

再说下我今天上午做的,具体来说就是将六轴传感器采集的角度数据进行判断,得出“上” “下” “左” “右” “中”的结论,然后按照一定的数据格式,将这个结论填到对应的字节,将这个报文蓝牙发送出去。 可能表述不是很清楚,让人感觉没啥关系。再加上一句“上” “下” “左” “右”对应键盘上的字符值‘W’ 'S' 'A' 'D'呢,实际发送的结论并不是该字符,而是一个数据,如下表格中对应关系

特定环境下的C知识点应用

这明显不是ASCII码值,也没往这方面想,直到中午看到这个知识点,才想到还可以这么实现这个功能

如今的实现是这样的 :使用#define定义了四个常量  ,将六轴传感器的角度解算中添加了个函数,当abs(angle.x的值) >= 45° 且 abs(angle.y的值)<=20°时认定为左右方向,再根据angle.x的值为正还是负来判断左还是右,将对应的常量(0x04 或 0x07)发送出去,上下方向同理,关于“中”则是 abs(angle.x的值) <= 10° 且abs(angle.y的值) <= 10°,则将对应的常量发送出去。

要求是只发送一次,而不是一直发送。就判断了一下: 当前值是否等于上一个值,如果不等则发送,如果等于则不发送。

若改为今天发现的这个知识点,则不用定义四个常量,而是static char  *classes = "WSAD",  调用时为(classed[n] - 61)即将ASCII码数值转换成上述表格的数值。我用的那种方法更适用于较少个数。要是映射到26个字母,那就该用第二种方法了,因为它们是连续的,更直观一些。虽然也可以用枚举类型实现,但实现起来更费时一些,而且只适用于键值连续时,实现起来可读性也没今天这个知识点更强。

最终效果是看到随着上转左转,双截龙小游戏的人物也随之上走左走时,我惊讶了一下,这是模拟键盘的键值了!!原来上面那是标准键盘键值的对应表,原来我写的那段代码是HID(human Interface Device)的一小部分功能。

现在感觉能力上有了小小的进步,接下来该试着将中午的那篇文章看完了。

https://mp.weixin.qq.com/s/zLJyOR2VcymPbiiviVxFCQ

本身写博客写的少,文字表达能力差,今天写这篇博文更多的是有些激动和兴奋,这么巧,作为知识点不显眼但给它个特定环境感觉用处不小,然后立即记录了下来,我怕再过几个小时就不会有这篇博客了,之后有时间会完善一下,让表述更直观清楚。