TT无人机扩展模块库分析(操控函数)1


/** * Gamesir joystick control handling * - Receive command from the joystick * - Control the drone by received command * * @param arg Parameter about task control */void gamesir_task(void *arg){ uint8_t command_init = 0; uint8_t mac_init = 0;
uint8_t stop_cnt = 5;
for (;;) { if (mac_init == 0) { CommonSerial.print("[TELLO] getmac?"); delay(100);#ifdef __DEFAULT_LOG__ Serial.println("gamesir_task(): mac is ok?");#endif if (rmtt_joystick_mac_is_valid()) {#ifdef __DEFAULT_LOG__ Serial.println("gamesir_task(): ble mac init");#endif p_tt_gamesir->Init(get_rmtt_joystick_mac()); mac_init = 1; } } else if ((command_init == 0) && (p_tt_gamesir->GetConnectedStatus())) { tt_sdk.SDKOn(); delay(100); if (rmtt_bool_is_valid()) { command_init = 1; } } else if (p_tt_gamesir->DataIsValid()) { // Serial.println("data is update"); PlainData data = p_tt_gamesir->GetData();
int lx = ((float)data.left_x_3d - 512) / 512.0 * 100; int ly = ((float)data.left_y_3d - 512) / 512.0 * 100; int rx = ((float)data.right_x_3d - 512) / 512.0 * 100; int ry = ((float)data.right_y_3d - 512) / 512.0 * 100;
if ((data.btn3 == 0x01) && (data.L2)) { tt_sdk.Flip('f'); } else if ((data.btn3 == 0x03) && (data.L2)) { tt_sdk.Flip('r'); } else if ((data.btn3 == 0x05) && (data.L2)) { tt_sdk.Flip('b'); } else if ((data.btn3 == 0x07) && (data.L2)) { tt_sdk.Flip('l'); } else if ((data.Y) && (data.R2)) { if (takeoff_status == 0) { tt_sdk.TakeOff(); takeoff_status = 1; } else { tt_sdk.Land(); takeoff_status = 0; } } else {#ifdef BLE_JAPAN_CTRL tt_sdk.SetRC(lx, -ly, -ry, rx);#else tt_sdk.SetRC(rx, -ry, -ly, lx);#endif } }
/* 避免rc指令粘包 */ delay(10);
/* Regularly send data packet to ensure the drone floating steadily after the controller was offline*/ if ((now_time - last_clean_time > 300) && command_init) { if (p_tt_gamesir->GetDataOffline()) { if (stop_cnt) { tt_sdk.SetRC(0, 0, 0, 0); stop_cnt--; } } else { /* keepactive */ CommonSerial.print("[TELLO] keepalive"); stop_cnt = 5; } last_clean_time = millis(); } else { }
now_time = millis(); }}

* Gamesir游戏杆控制处理

*-从操纵杆接收命令

*-通过收到的命令控制无人机

*

* @param arg有关任务控制的参数

*

unsigned char这个东西我上面解读过

cnt变量多次出现,我去查一下

可以看到计数变量

for(;;)死循环

开始一个判断,如果mac的指令未初始化继续往下运行.

下面又是许多的判断语句,符合各种情况去处理

这个现象叫做粘包,就是指两次结果粘到一起了.看这个地方解决很简单,就是延时了一下.

打印,得到mac的地址没有?

延时一下,就开始继续运行,此时调试的打印开关打开.

手柄任务:mac地址ok嘛~

如果地址有效为正~打印:手柄(蓝牙地址初始化)

这个是初始化的函数,参数是这个手柄的蓝牙Mac.

接着

这是这个函数

函数声明

第一个是参数的声明

第一次判断

任务的结尾,吧标志位更改

如果这个指令初始的值为0和和链接的状态信息与运算为真就开始执行.

我们看到这个函数的命名空间是Protocol里面定义

下文看

SDK控制开始

*获取是否收到布尔类型数据的有效状态

*来自无人机

普通数据有个类

接着这个地方判断成立的条件是数据有效

后面结合SDK解读

这段有的地方不懂,翻转?

降落

我们打开这个看看下面

日本手用左手控制油门

下期我们来对飞行指令解包

(0)

相关推荐

  • 基于LiteOS的智慧农业案例实验分享

    最近在指导一位读者朋友做毕业设计,该毕设是关于端云互通的,基于小熊派+LiteOS+华为云. 在指导他的过程中我也学到了不少东西,这里通过一个案例实验(智慧农业)给大家分享一些知识. 实验框图 相关模 ...

  • (1条消息) 微信小程序云开发实践

    概述 : 开发者可以使用云开发开发微信小程序.小游戏,无需搭建服务器,即可使用云端能力. 云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发 ...

  • TT无人机扩展模块库分析(default.ino)补篇2

    这个简单 请对照 因为源码在这里出现了和手柄相关的源码 设置tof传感器的超时时间(500)什么单位? 没有搜索到,我用SI了 搜索到了~有很多函数 定位位置 在这里 找到了,为什么我又回去了code ...

  • TT无人机扩展模块库分析(default.ino)补篇1

    昨天文章的最后着急的发表,没有好好分析最后这一个 我决定今天继续写一下 因为在具体的语句里面使用预处理命令是我第一次见的 平时都是在文件首有,今天在内部.值得说说 这个地方我在截图一下 在一个{ }内 ...

  • TT无人机扩展模块库分析(default.ino)补篇3

    处理有关矩阵的命令: 自定义回调函数的模板,先定义三个参数 下面写处理函数就行 WiFi更新功能 先定义一个cnt变量 注释写:将您的设置代码放在此处,即可运行一次 先设置一个串口波特率,开启的是Se ...

  • Tello talent无人机扩展模块库分析(整体篇)

    长这样,虽然我没有实物 https://www.dji.com/cn/robomaster-tt/downloads 在网站里面给出了地址 地址 很小众的东西,才3❤ 我star一下 ❤+1 可以看到 ...

  • Tello talent无人机扩展模块库分析(default.ino)

    这个地方把ino后缀改成是cpp,不影响 Ardunio的编程语言,原型是wring 这个是官网的文章 https://github.com/arduino/arduino-cli http://wi ...

  • ESPcopter无人机源码分析.2(使用分时库)

    今天分析的是点灯程序的升级版,厉害之处在于这个闪烁是用了精度比较高的函数库,不是就像以前一样是delay()延时 首先我们分析的东西不多,就一点 我们先从我们熟悉的代码入手. 作为标准的Arduino ...

  • 中国工业无人机行业评估分析与投资战略研究报告2021-2027年版

    第1章:工业无人机行业概念界定和发展环境剖析1.1 工业无人机行业概念界定及统计口径说明 1.1.1 无人机的定义 1.1.2 无人机的分类 (1)按飞行方式/技术特征分类 (2)按飞行高度分类 (3 ...

  • 全球工业无人机市场简单分析

    全球工业无人机行业处于成长期 政府采购占比大 工业级无人机主要应用于电力巡线.农林植保.消防.警用.海洋巡视等领域.种种迹象表明,当前工业级无人机已摆脱了消费级无人机的影子,开始出现产业逐渐明晰.需求 ...

  • STM32教程(五)HAL库之GPIO函数及实例详细介绍!

    今天介绍STM32 HAL库的GPIO函数库,首先打开stm32f4xx_hal_gpio.h文件,我们能看到一些结构体定义以及GPIO引脚的地址定义等等, 这些都很好理解,我们需要重点看HAL库中G ...