[DIY]用无线游戏手柄遥控mBot

2015-8-15 18:22:10游戏手柄, 无线
69306
Makeblock的USB Host转串口模块是一个让Arduino外接USB鼠标或者其它HID设备的电子模块。有了它,我们可以为mBot增加新的控制方式——无线游戏手柄遥控。
2015_08_15_19_58_35.gif
准备材料:
1、mBot套件 x1  官网中文资料
2、Me USB Host模块 x1 官网中文资料
3、淘宝上购买的无线2.4G游戏手柄 x1  推荐淘宝链接

meusbhost.jpg
USB Host的特点:
1、USB主控是国产的CH375B
2、支持描述符小于64字节的HID设备
3、串口默认波特率是9600

由于mBot的主控板mCore硬串口没有提供RJ25接口,所以示例程序使用模拟串口来实现与USB Host通讯。
控制过程   mCore <--> USB Host <--> USB 2.4G Dongle <--> Wireless Joystick
                    |
                    |
              直流马达

meusbhost2.jpg

先简单测试一下控制电机正反转

2015_08_15_17_07_55(0).gif
[C++] 纯文本查看 复制代码
#include "MeUsb.h"//引用USB库
MeUsb usb(10,9); //指定串口tx,rx引脚

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

void loop()
{
  if(!usb.device_online)
  {
    usb.probeDevice(); //轮询USB设备
    delay(100);
  }
  else
  {
//接收USB设备的数据
    int len = usb.host_recv();
    if(len>4){
      parseJoystick(usb.RECV_BUFFER);
    }
  }
}
void parseJoystick(unsigned char * buf)
{
//解析手柄的数据
  uint8_t buttonCode = buf[4]&0xff;
  uint8_t buttonCode_ext = buf[5]&0xff;
  uint8_t joystickCodeL_V = buf[3]&0xff; //top 0 bottom ff
  uint8_t joystickCodeL_H = buf[2]&0xff; //left 0 right ff
  uint8_t joystickCodeR_V = buf[1]&0xff; //top 0 bottom ff
  uint8_t joystickCodeR_H = buf[0]&0xff; //left 0 right ff
  uint8_t directionButtonCode = (buttonCode&0xf);
  uint8_t rightButtonCode = (buttonCode&0xf0)>>4;
  switch(directionButtonCode){
   ...
    case 2:{
      //right
//控制电机右转
      runMotor(MOTOR_1,100);
      runMotor(MOTOR_2,100);
      break;
    }
   ...
    case 6:{
      //left
//控制电机左转
      runMotor(MOTOR_1,-100);
      runMotor(MOTOR_2,-100);
      break;
    }
    ...
    default:{
      // release;
      runMotor(MOTOR_1,0);
      runMotor(MOTOR_2,0);
    }
  }
}

void runMotor(int motor,int speed){
//电机驱动
  int _dirPin;
  int _pwmPin;
  if(motor==MOTOR_1){
    _dirPin = 7;
    _pwmPin = 6;
  }else if(motor==MOTOR_2){
    _dirPin = 4;
    _pwmPin = 5;
  }
  pinMode(_dirPin,OUTPUT);
  pinMode(_pwmPin,OUTPUT);
  digitalWrite(_dirPin,speed>0);
  analogWrite(_pwmPin,abs(speed));
}
IMG_20150815_195928.jpg
下载小车运动控制完整代码:

arduino.zip

13.19 KB, 下载次数: 1522

对该帖+20 金钱,并说 很给力!
1人收藏
6 条回帖
Mark-Yan新手会员2015-8-25 17:12:42
本帖最后由 Mark-Yan 于 2015-8-25 17:18 编辑

好酷的设计。
sn10161016新手会员2015-12-8 00:16:39
这个需要对usb host进行一些设置吗,为什么我的usb host灯不亮呢
SNOOBY新手会员2016-3-20 09:24:57
厉害啊
曾令平新手会员2016-3-21 14:58:37
   没看到有USB接口的配置     连接后还是用不了
471836186新手会员2016-10-26 17:57:29
http://bbs.makeblock.com/forum.p ... &extra=#pid1982
你好,关于usb host可以回复一下吗
sax_yang新手会员2018-1-14 08:14:21
楼主,附件不能下载了,麻烦您重新传一个好吗?
需要登陆后才可进行回复 登录

返回顶部
现在加入我们,注册一个账号 账号登陆 QQ账号登陆 微博账号登陆