九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
TT無人機(jī)擴(kuò)展模塊庫分析(操控函數(shù))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游戲桿控制處理

  *-從操縱桿接收命令

  *-通過收到的命令控制無人機(jī)

  *

  * @param arg有關(guān)任務(wù)控制的參數(shù)

*

unsigned char這個(gè)東西我上面解讀過

cnt變量多次出現(xiàn),我去查一下

可以看到計(jì)數(shù)變量

for(;;)死循環(huán)

開始一個(gè)判斷,如果mac的指令未初始化繼續(xù)往下運(yùn)行.

下面又是許多的判斷語句,符合各種情況去處理

這個(gè)現(xiàn)象叫做粘包,就是指兩次結(jié)果粘到一起了.看這個(gè)地方解決很簡單,就是延時(shí)了一下.

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

延時(shí)一下,就開始繼續(xù)運(yùn)行,此時(shí)調(diào)試的打印開關(guān)打開.

手柄任務(wù):mac地址ok嘛~

如果地址有效為正~打印:手柄(藍(lán)牙地址初始化)

這個(gè)是初始化的函數(shù),參數(shù)是這個(gè)手柄的藍(lán)牙Mac.

接著

這是這個(gè)函數(shù)

函數(shù)聲明

第一個(gè)是參數(shù)的聲明

第一次判斷

任務(wù)的結(jié)尾,吧標(biāo)志位更改

如果這個(gè)指令初始的值為0和和鏈接的狀態(tài)信息與運(yùn)算為真就開始執(zhí)行.

我們看到這個(gè)函數(shù)的命名空間是Protocol里面定義

下文看

SDK控制開始

*獲取是否收到布爾類型數(shù)據(jù)的有效狀態(tài)

*來自無人機(jī)

普通數(shù)據(jù)有個(gè)類

接著這個(gè)地方判斷成立的條件是數(shù)據(jù)有效

后面結(jié)合SDK解讀

這段有的地方不懂,翻轉(zhuǎn)?

降落

我們打開這個(gè)看看下面

日本手用左手控制油門

下期我們來對飛行指令解包

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
純python實(shí)現(xiàn)的視頻監(jiān)控客戶端軟件(終稿)
試玩系列 | 大疆TT無人機(jī)編程初體驗(yàn),教你對它為所欲為!
五子棋程序(運(yùn)行環(huán)境:C++builder)
threadingtest安卓應(yīng)用測試工具開箱使用指南
Mac下Android開發(fā)環(huán)境搭建
Mac下安裝Android模擬器
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服