【交流帖】关于遥控器协议里没有说明的部分
这是2015年的协议数据帧里有一个16位的数据RC_Ctl_Define_t.key.v,每一个位对应一个按键,键盘按下时这个键位就为1,松开就为0。
要用USB线把遥控器联上电脑,打开客户端后才能用键盘鼠标控制,客户端的调试窗口显示的按键信息是没有用的,不用管它。
开关:
如果接收的数据是按如图这样的,那么,遥控器右边的是S1,左边的是S2,跟协议里的相反。
鼠标:
鼠标往左移动,X值为负,往右为正:鼠标往前移动,Y值为负,往后为正:Z轴无用。
虽然鼠标的值域是-32768~32767,但是,以平常的鼠标DPI,最大移动速度是也只到300左右,所以取-300~300就行了,用一个函数限制一下值域,超过300取300。
数据长度:
据某些同学说数据长度是25字节,但是我测得是18字节,遥控器的拨轮没有用。
这个是遥控器的数据结构体,用这个结构体接收数据不需要解析代码,接收的字节流储存在RC_Ctl_t.buf里,然后直接提取相应的数据使用就行了。
typedef union
{
struct
{
struct
{
uint16_t ch0:11;
uint16_t ch1:11;
uint16_t ch2:11;
uint16_t ch3:11;
uint8_ts1:2;
uint8_ts2:2;
}rc;
struct
{
int16_t x;
int16_t y;
int16_t z;
uint8_t press_l;
uint8_t press_r;
}mouse;
struct
{
uint16_t v;
}key;
};
uint8_t buf;
}RC_Ctl_t;
用法:
把遥控器示例里的这一段用上面的结构体替换,然后。。
typedef struct
{
struct
{
uint16_t ch0;
uint16_t ch1;
uint16_t ch2;
uint16_t ch3;
uint8_t s1;
uint8_t s2;
}rc;
struct
{
int16_t x;
int16_t y;
int16_t z;
uint8_t press_l;
uint8_t press_r;
}mouse;
struct
{
uint16_t v;
}key;
}RC_Ctl_t;
然后把这一段删掉就大功告成!
RC_Ctl.rc.ch0 = (sbus_rx_buffer| (sbus_rx_buffer << 8)) & 0x07ff; //!< Channel 0
RC_Ctl.rc.ch1 = ((sbus_rx_buffer >> 3) | (sbus_rx_buffer << 5)) & 0x07ff; //!< Channel 1
RC_Ctl.rc.ch2 = ((sbus_rx_buffer >> 6) | (sbus_rx_buffer << 2) | //!< Channel 2
(sbus_rx_buffer << 10)) & 0x07ff;
RC_Ctl.rc.ch3 = ((sbus_rx_buffer >> 1) | (sbus_rx_buffer << 7)) & 0x07ff; //!< Channel 3
RC_Ctl.rc.s1 = ((sbus_rx_buffer >> 4)& 0x000C) >> 2; //!< Switch left
RC_Ctl.rc.s2 = ((sbus_rx_buffer >> 4)& 0x0003);//!< Switch right
RC_Ctl.mouse.x = sbus_rx_buffer | (sbus_rx_buffer<< 8); //!< Mouse X axis
RC_Ctl.mouse.y = sbus_rx_buffer | (sbus_rx_buffer<< 8); //!< Mouse Y axis
RC_Ctl.mouse.z = sbus_rx_buffer | (sbus_rx_buffer << 8); //!< Mouse Z axis
RC_Ctl.mouse.press_l = sbus_rx_buffer;//!< Mouse Left Is Press ?
RC_Ctl.mouse.press_r = sbus_rx_buffer;//!< Mouse Right Is Press ?
RC_Ctl.key.v = sbus_rx_buffer | (sbus_rx_buffer<< 8); //!< KeyBoard value
typedef union
{
struct
{
struct
{
uint16_t ch0:11;
uint16_t ch1:11;
uint16_t ch2:11;
uint16_t ch3:11;
uint8_ts1:2;
uint8_ts2:2;
}rc;
struct
{
int16_t x;
int16_t y;
int16_t z;
uint8_t press_l;
uint8_t press_r;
}mouse;
struct
{
uint16_t v;
}key;
};
uint8_t buf;
}RC_Ctl_t;
,,,这就花了我23金币,,表示看不懂(不是程序猿):(:@:(:lol 蒙奇路飞 发表于 2015-10-8 23:39
你好!有遥控器协议资料吗???可以发我一份吗?。。。。还有就是那个遥控器是要写程序的吗???我现在有 ...
http://bbs.robomasters.com/forum.php?mod=attachment&aid=Mjc4NXw4OGIyYzgzMXwxNDQ0NDAzNjY4fDM0fDExMjM%3D
遥控器不用写程序,程序写给接收端,用作解析接收到的数据,这个协议配套RM的固件用,遥控器要刷RM固件。 你好!有遥控器协议资料吗???可以发我一份吗?。。。。还有就是那个遥控器是要写程序的吗???我现在有一个DT7的遥控器,但是不懂怎么用?还请多多指教。。。。 怎么弄得啊 求指导 干得漂亮 总结得很好啊 bingxin 发表于 2015-5-7 12:24
怎么弄得啊 求指导
什么怎么弄 哇···太震撼了,楼主看来花了不少功夫啊 不错不错。。 我要咱金币啊哈哈
页:
[1]
2