做毕设的时候涉及到需要进行简单的遥控操作去检测机器人的运行状态,简单写个笔记
富斯官网:FlyskyRC
先附上富斯的IBUS协议:
对于I6X来说,可以选择6-10通道的数据输出,摇杆对应频道1-4,5-6,7-10可以选择是旋钮还是拨杆,具体界面下图
在正式编写代码之前,让我们先对遥控器和接收机进行一下设置:
1.进行配对
首先要对FS-A8S进行供电,VCC说明书上是4-8V,(实测用MCU的3.3V好像也行)
然后在VCC接通前(注意一定是接通前)按住Bind按钮,直到接收机变为快闪
随后我们按住I6X的Bind按钮,同时打开power,这时需要将油门杆打到最小,所有拨杆向上,显示对码中后,发现接收机的LED变为慢闪,就对码完成,此时遥控器关机或者选择cancel都是可以的,关机后可以看到接收机慢闪,开机后变为常亮就成功了。
2.频道配置
那么如何让遥控器发出10个频道的数据呢?
开机后按住ok键3秒,进入设置。首先在系统-辅助开关设置中,打开所有辅助开关,通道数设为10,然后长按3秒cancel保存(这里很重要)
然后在功能-辅助通道选择开关,旋钮所绑定的通道,同样长按保存
3.观测输出
我们将接收机连接到串口芯片,接在PC上,用串口助手查看下输出信息
20 40 E1 05 C5 07 DF 05 EC 03 E7 05 EC 05 E8 03 E8 03 E8 03 E8 03 DC 05 DC 05 DC 05 B2 07 35 F3
一共有32位数据,共可以解析出18个通道的信息,但是此时只有10个通道是有数据的
05DC是1500,默认是中值,也就是无输出
chVal[ 0] = buf[ 0] | (((uint16_t)buf[ 1]&0X0F)<<8);
chVal[ 1] = buf[ 2] | (((uint16_t)buf[ 3]&0X0F)<<8);
chVal[ 2] = buf[ 4] | (((uint16_t)buf[ 5]&0X0F)<<8);
chVal[ 3] = buf[ 6] | (((uint16_t)buf[ 7]&0X0F)<<8);
chVal[ 4] = buf[ 8] | (((uint16_t)buf[ 9]&0X0F)<<8);
chVal[ 5] = buf[10] | (((uint16_t)buf[11]&0X0F)<<8);
chVal[ 6] = buf[12] | (((uint16_t)buf[13]&0X0F)<<8);
chVal[ 7] = buf[14] | (((uint16_t)buf[15]&0X0F)<<8);
chVal[ 8] = buf[16] | (((uint16_t)buf[17]&0X0F)<<8);
chVal[ 9] = buf[18] | (((uint16_t)buf[19]&0X0F)<<8);
chVal[10] = buf[20] | (((uint16_t)buf[21]&0X0F)<<8);
chVal[11] = buf[22] | (((uint16_t)buf[23]&0X0F)<<8);
chVal[12] = buf[24] | (((uint16_t)buf[25]&0X0F)<<8);
chVal[13] = buf[26] | (((uint16_t)buf[27]&0X0F)<<8);
chVal[14] = (buf[ 1]>>4)|(buf[ 3]&0XF0)|(((uint16_t)buf[ 5]&0XF0)<<4);
chVal[15] = (buf[ 7]>>4)|(buf[ 9]&0XF0)|(((uint16_t)buf[11]&0XF0)<<4);
chVal[16] = (buf[13]>>4)|(buf[15]&0XF0)|(((uint16_t)buf[17]&0XF0)<<4);
chVal[17] = (buf[19]>>4)|(buf[21]&0XF0)|(((uint16_t)buf[23]&0XF0)<<4);
参考推荐
解析协议的源码就不放了,可以参考下这位大佬的帖子: