Gmii.tw
  • Home
    • 關於我們 >
      • 關於全佑
      • 歷年成果
  • 線上課程
    • 線上課程列表
  • 商品資訊
    • 應用部落格
    • KittenBot >
      • 合格師資名單
      • 相關影片
      • Kittenblock 下載
    • GMII ROBOT >
      • GMII robot controller
    • 應用APP下載
  • 連絡我們
    • 人才招募

如何使用遊戲手把控制機器人

17/12/2015

0 評論

 
图片
著作權歸作者所有。
商業轉載請聯繫作者獲得授權,非商業轉載請注明出處。
作者:科長
連結:http://zhuanlan.zhihu.com/makeblock/20306790
來源:知乎


在製作一些 Arduino 機器人項目時,我們通常希望能便捷地控制機器人。常用的方法有:紅外遙控器、手機 App 控制、USB 設備(鍵鼠/手把)控制等。其中紅外遙控器的控制距離和穩定性都不是很好,手機 App 的實現難度又比較高,比較理想的其實還是使用通用 USB 設備控制機器人。本文將以一款 USB 無線遊戲手把為例,講解如何解析 USB 設備的通信協定,並實現對機器人的控制。
為了讓 Arduino 能讀取 USB 設備的資料,必須使用一塊晶片——CH375B。這塊晶片可以將 USB 資料轉為串口資料,發送給 Arduino。本文使用的是 Makeblock USB Host 模組,其中就帶有一塊 CH375B 晶片。Makeblock 為這個模組提供了庫檔,可以通過簡單地調用庫函數來實現初始化、讀取等操作,不再需要發送一系列指令。簡單地安利一下,常規的 CH375 庫只能使用串口與 CH375 晶片通信,而 Makeblock 封裝後的庫可以使用任意兩個引腳類比串口,不需要佔用硬體串口資源。庫檔可以在這裡下載: Makeblock-official/Makeblock-Libraries · GitHub
先將 USB Host 模組連接到 Makeblock Orion 上,並將無線 USB 遊戲手把的接收器查到 USB Host 模組上。這個遊戲手把是淘寶上隨意買的一款,一般來說 CH375 支援的設備都是普通的 USB 設備,高端的遊戲鍵鼠和手把可能會不相容。
图片
然後編寫一段程式,將 USB Host 接收到的資料通過串口發送到 PC 端查看。

#include "MeOrion.h"
#include "SoftwareSerial.h"

MeUSBHost usbhost(PORT_3);

int length = 0;

void parseJoypad(unsigned char *buf)             //print the data from USB Host
{
        for(int i = 0; i < length; i++)
        {
                  Serial.print(buf[i]);
                  Serial.print(" - ");
        } Serial.println(buf[length]);
}

void setup()
{
            Serial.begin(57600);
            usbhost.init(USB1_0);                   //USB1_0 or USB2_0
}

void loop()
{
           if(!usbhost.device_online)
           {
                 usbhost.probeDevice();
                 delay(1000);
            }
                    else
            {
                 length = usbhost.host_recv();
                 parseJoypad(usbhost.RECV_BUFFER);
                
delay(5);
             }
​}
串口讀到的資料如下圖:
图片
反復操作遊戲手把並觀察接收到的資料,可以總結出操作和資料之間的規律:
// 手把代碼(紅燈亮)
// 默認:128-127-128-127-15-0-0-128
// 左一:128-127-128-127-15-1-0-128
// 右一:128-127-128-127-15-2-0-128
// 左二:128-127-128-127-15-4-0-128
// 右二:128-127-128-127-15-8-0-128
// 三角:128-127-128-127-31-0-0-128 (0001 1111)
// 方形:128-127-128-127-143-0-0-128 (1000 1111)
// 叉號:128-127-128-127-79-0-0-128 (0100 1111)
// 圓圈:128-127-128-127-47-0-0-128 (0010 1111)
// 左微動: 128-127-128-127-15-64-0-128
// 右微動: 128-127-128-127-15-128-0-128
// 向上:128-127-128-127-0-0-0-128 (0000 0000)
// 向下:128-127-128-127-4-0-0-128 (0000 0100)
// 向左:128-127-128-127-6-0-0-128 (0000 0110)
// 向右:128-127-128-127-2-0-0-128 (0000 0010)
// 左上:128-127-128-127-7-0-0-128 (0000 0111)
// 左下:128-127-128-127-5-0-0-128 (0000 0101)
// 右上:128-127-128-127-1-0-0-128 (0000 0001)
// 右下:128-127-128-127-3-0-0-128 (0000 0011)
// 選擇:128-127-128-127-15-16-0-128
// 開始:128-127-128-127-15-32-0-128
// 搖杆:右X-右Y-左X-左Y-15-0-0-128

調用 usbhost.host_recv() 函數後,接收到的資料將保存在以 usbhost.RECV_BUFFER 為起始位址的緩存中。想要用這個手把控制機器人,只需要在 Arduino 的 loop 函數裡調用 host_recv() 函數,並在 parseJoypad() 函數中,訪問 RECV_BUFFER 位址讀取內容,並根據這些內容來控制機器人。
0 評論



發表回覆。

    師資培訓
    課程資訊
    檔案連結
    商品介紹
    應用影片

    文章分類

    全部
    Makeblock
    MBlock
    MBot 技術文章
    Scratch
    機構實作
    電子模塊手冊

    檔案分享

    九月 2016
    八月 2016
    四月 2016
    二月 2016
    一月 2016
    十二月 2015
    十一月 2015
    十月 2015
    九月 2015
    八月 2015
    七月 2015
    六月 2015
    五月 2015
    四月 2015
    九月 2014
    八月 2014
    七月 2014
    六月 2014
    五月 2014
    三月 2014
    九月 2013
    七月 2013
    五月 2013

    RSS 訂閱

图片

全佑電腦- 機器人科學館 
© 2013 All RightReserved.

TEL:(+886) 03-9560365
265 宜蘭縣羅東鎮林森路105號

No.298, Gongzheng Rd., Luodong Township, Yilan County 265, Taiwan (R.O.C.)

聯絡我們

宜蘭總公司
Proudly powered by Weebly
  • Home
    • 關於我們 >
      • 關於全佑
      • 歷年成果
  • 線上課程
    • 線上課程列表
  • 商品資訊
    • 應用部落格
    • KittenBot >
      • 合格師資名單
      • 相關影片
      • Kittenblock 下載
    • GMII ROBOT >
      • GMII robot controller
    • 應用APP下載
  • 連絡我們
    • 人才招募