圓創力科技

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

查看: 6312|回復: 0

轉貼:用無線遊戲把手遙控mBot

[複製鏈接]
magiccar 發表於 2015-9-23 23:09 | 顯示全部樓層 |閱讀模式
Makeblock 的 USB Host 轉串列通信模組是一個讓 Arduino 可外接USB滑鼠或者其它HID設備的電子模組。有了它,我們可以為 mBot 增加新的控制方式——無線遊戲手柄遙控。

資料來源:bbs.makeblock.cc/thread-706-1-1.html
準備材料:
1、mBot套件x1
2、Me USB Host模組 參考說明
3、無線2.4G遊戲把手x1


USB Host的特點:
1、USB主控晶片是的CH375B
2、支援描述位元符小於64 Byte的HID設備
3、默認鮑率是9600

由於 mBot 的主控板 mCore 硬體序列埠沒有提供RJ25接口,所以範例程式使用軟體序列埠來實現與 USB Host 通訊。
控制過程 mCore <--> USB Host <--> USB 2.4G Dongle <--> Wireless Joystick
                    |
                    |
              直流馬達



先簡單測試一下控制馬達正反轉



  1. #include "MeUsb.h"//引用USB Library
  2. MeUsb usb(10,9); //指定串口tx,rx引脚

  3. void setup()
  4. {
  5.    Serial.begin(9600);
  6.    usb.init(USB1_0);//初始化USB Host
  7. }

  8. void loop()
  9. {
  10.   if(!usb.device_online)
  11.   {
  12.     usb.probeDevice(); //輪詢USB設備
  13.     delay(100);
  14.   }
  15.   else
  16.   {
  17. //接收USB設備的資料
  18.     int len = usb.host_recv();
  19.     if(len>4){
  20.       parseJoystick(usb.RECV_BUFFER);
  21.     }
  22.   }
  23. }
  24. void parseJoystick(unsigned char * buf)
  25. {
  26. //解析手把的資料
  27.   uint8_t buttonCode = buf[4]&0xff;
  28.   uint8_t buttonCode_ext = buf[5]&0xff;
  29.   uint8_t joystickCodeL_V = buf[3]&0xff; //top 0 bottom ff
  30.   uint8_t joystickCodeL_H = buf[2]&0xff; //left 0 right ff
  31.   uint8_t joystickCodeR_V = buf[1]&0xff; //top 0 bottom ff
  32.   uint8_t joystickCodeR_H = buf[0]&0xff; //left 0 right ff
  33.   uint8_t directionButtonCode = (buttonCode&0xf);
  34.   uint8_t rightButtonCode = (buttonCode&0xf0)>>4;
  35.   switch(directionButtonCode){
  36.    ...
  37.     case 2:{
  38.       //right
  39. //控制馬達右轉
  40.       runMotor(MOTOR_1,100);
  41.       runMotor(MOTOR_2,100);
  42.       break;
  43.     }
  44.    ...
  45.     case 6:{
  46.       //left
  47. //控制馬達左轉
  48.       runMotor(MOTOR_1,-100);
  49.       runMotor(MOTOR_2,-100);
  50.       break;
  51.     }
  52.     ...
  53.     default:{
  54.       // release;
  55.       runMotor(MOTOR_1,0);
  56.       runMotor(MOTOR_2,0);
  57.     }
  58.   }
  59. }

  60. void runMotor(int motor,int speed){
  61. //馬達驅動
  62.   int _dirPin;
  63.   int _pwmPin;
  64.   if(motor==MOTOR_1){
  65.     _dirPin = 7;
  66.     _pwmPin = 6;
  67.   }else if(motor==MOTOR_2){
  68.     _dirPin = 4;
  69.     _pwmPin = 5;
  70.   }
  71.   pinMode(_dirPin,OUTPUT);
  72.   pinMode(_pwmPin,OUTPUT);
  73.   digitalWrite(_dirPin,speed>0);
  74.   analogWrite(_pwmPin,abs(speed));
  75. }
複製代碼



下載小車運動控制完整程式 arduino_2.4G_PS2.zip (13.19 KB, 下載次數: 29)




您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

QQ|Archiver|手機版|小黑屋|圓創力科技有限公司 IOP Robotic Technology Co.,Ltd Tel: 07-3924582 Fax: 07-3924001

GMT+8, 2024-3-29 18:27 , Processed in 0.033707 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回復 返回頂部 返回列表