c获取mac地址的函数_TT无人机扩展模块库分析(操控函数)1

b42936d1deece36e2a804d56833a29fa.png

c5d464476c40a2cca6b8897b5d52f05f.png

/** * 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有关任务控制的参数

*

ba36311783d5b774b659e795183cd18a.png

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

a80241910052527097dc31ecedb26f82.png

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

dae8e505c42e549e26a1b2d4d7fe0bf9.png

可以看到计数变量

1fead7493f6c246d75bc211472aff869.png

for(;;)死循环

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

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

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

3059f69cf46a7b45939188a1acac6a59.png

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

57e5de90421773ab6a1da6e2c1760fa3.png

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

手柄任务:mac地址ok嘛~

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

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

接着

fb3300e1e28ff4cb8233abbc88ac8fcf.png

这是这个函数

dc5d7efe13f9b2b20d63028714cf5809.png

函数声明

121510e511936046884a8c9c348f9036.png

第一个是参数的声明

1209962abdefbbf716dd1ca6c6f72a35.png

第一次判断

ae70bdf7d39de5bd31a3d02cad5c7c34.png

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

b1e44d48648fa915a8af7f57e11a7d4a.png

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

cf4699001bdac94b084fbd01ba8440a7.png

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

下文看

d7d00ed98a7464c8d9d87890cc820e99.png

SDK控制开始

5f83dfb0edb60cad584fa651c6438e75.png

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

*来自无人机

f9bbd6f12fb655f94ceab03fc289182b.png

普通数据有个类

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

1a0ecee0ae3958fa689da0c23365ff2b.png

后面结合SDK解读

f7dd52a8d44e1e89c1258c5407af62d1.png

6bd396d27149b1ae3080f741e508c6d0.png

7e3b06737f5745dbd33d18682bcaf876.png

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

e5afbbf98e7923bf793ede4d2b7ff117.png

629d30560291ff0da81e9190b7af3a37.png

降落

f23ce69370c042510dac91551b9dc3fa.png

我们打开这个看看下面

ca0a5eed6e347a7ffe662c540e260135.png

日本手用左手控制油门

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

b42936d1deece36e2a804d56833a29fa.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值