14399| 12
|
[求助] 360°全方位玩转你手里的小手柄(DFR0304产品使用指南) |
本帖最后由 Gary 于 2015-2-5 15:08 编辑 DF的JOYSTICKS产品的摇杆数和按键数都不是很多,如果项目自由度升高的话那可就是捉襟见肘了。楼主最近就在做一个搭建在坦克上的两轴云台,坦克本身需要两个摇杆来控制,上面的炮(yun)台也需要两个摇杆。自己搭建遥控器吧,拿出去太LOW了,使用DF的输入扩展版吧,按键又不够,找来找去找到了一款磨人的小手柄,就是今天的主角DFR0304了。 研究一番之后发现,这款手柄如果使用得当可以发挥出极大的价值。首先它按键众多(四个模拟值输出,十四个数字按键,简直是瞬间翻身做土豪随便玩耍了啊!)。其次,它可以(伪)多通道同时输出,与平时自己搭建的遥控器不同,这款手柄可以多个按键(最多三个,已经可以满足大部分需求)和摇杆的数据同时输出。这样小伙伴们就可以嗨皮的做各种复杂动作了。而且,作为一个经常作死搭建复杂系统的人,数字口和模拟口不够用是经常的事,这个手柄不像多通道的航模遥控器那样一占就是一串输入口,如果跟楼主一样用的是Romeo with Ble的话,那就一个口也不会占了。 好了,在发现了一块新大陆后我才想到,为什么从来没见过哪个系统是用这个遥控的呢,看了看WIKI才发现,原来是这货使用难度太高了。它的工作原理是这样的,中间有三个按键是负责连接和重连还有改主从模式的。这个没有什么,它的连接完全是自动的,使用过程中也没有发现什么坑。但是坑在后面,就是信息的传输是个大坑,它不是可编程式的发送固定的命令,而是自动的发送一串数据流,数据流内部包含了按键的全部信息,这也是为什么我之前说是(伪)多通道的原因了。收到这个数据流不难,只要注意把波特率调成115200就可以了。 程序和串口读到的数据如上图。 手柄不自带回车,经简化后的数据流如下: 前三位0x55,0xAA,0x11为帧头和地址位,不携带按键信息。可用于确定信息是否返回,和是否返回正确。之后的一位为数字键按下个数位,可以为0,1,2,3(最多支持三键无冲)。如果有数字键按下则后面会列出被按下的数字键对应的键位值,再接下来是四个摇杆的状态和,四个摇杆分别对应数值1,2,4,8,其和即为输出的值,通过转换成二进制再移位判断奇偶即可判断出是那个摇杆被移动了。然后四位为摇杆被拨到的位置对应的模拟值。经楼主实测,拨到最上端或者最左端其对应的模拟值为255,反之则为0,需要注意的是,如果该轴没有被拨动,它输出的值也是0,所以在使用的过程中对状态的判断是很重要的。从100到150都会被手柄默认为中点,即四个轴的模拟量输出范围为0-99&151-255。最后一位是校验位,是前面数据的异或和,如果不是特别严格要求的小伙伴这个可以忽略。 好了,说到这大家可能就已经晕了,而且这些命令判断起来极其的不和谐。所以,我就想,为什么不写一个库文件呢。说干就干,经过一天多的调试和编程,终于完成了这款产品的库文件的编写。使用了这个库之后这个手柄就可以被你任意宰割了,像提取什么信息就可以提取什么信息,不压榨完最后一丝营养,决不罢休。 话不多说,上图。 上图显示出了我的库文件可以提取出来的所有信息。 Stick State后面的四个数字分别代表了四个摇杆被拨动的状态,1 1 0 0表示前两个摇杆被拨动了,后两个摇杆在中间(四个摇杆顺序依次为右侧X轴,Y轴,左侧X轴,Y轴)。 Stick后面的四个数字分别为四个摇杆的模拟量输出,为兼容其他程序,我把原始位置(即无输出时)的模拟值输出默认为128. Button number后面的数字为数字按键被按下的个数。 Buttons后面的数字为被按下的按键对应的数值,具体对应关系如下图: Button state后面的十四个数位分别代表了十四个数字按键被按下的状态,0为未被按下,1为按下。 具体的库文件的使用方法和函数的调用可以详见样例代码。 好了,研究了这玩意一天多得到的信息大致就是这些了,哦,对了,这货在没有任何按键和摇杆被按下的时候是没有数据流传输回来的,在大家编写程序的时候要注意这点。这款产品还内置了两个电机来实现震动的功能,可是由于固件不能更改,只有判断是否连接成功的功能,有些遗憾。 目前只在Romeo with ble和Arduino IDE 1.5.7的系统下成功运行过,其他平台的兼容性还未做测试。 |
2.64 KB, 下载次数: 6874
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed