_SKU_DFR0182_基于Arduino可编程无线遥控手柄V2.2 - jimaobian/DFRobotWikiCn GitHub Wiki

简介

DFRobot特别推出Arduino无线遥控手柄 V2.2,在V1.1版本基础上再做大幅度升级!XBEE插 槽可以支持XBEE、WIFI、RF和蓝牙模块,让您可以与机器人、移动平台或无人机(UAV)等 任何您想要的控制设备进行通信。

与V1.1版本最大的区别在与使用了Arduino Leonado作为主微控器,这样它依然还是一个超 高个性化的游戏手柄,更妙的这是一个带震动电机的游戏手柄!可以适应Linux、Mac OS X以及Windows系统环境。电池盒可使用三节AAA电池或USB-ICSP电源输入。

整个手柄有两个模拟量的摇杆(每个带有模拟量按键),还有17个高性能按键,控制器采用 传统PS3游戏手柄布局,适合绝大多数类似的游戏,经过按键编程后也兼容XBOX系列游戏。 所有按键、摇杆以及震动电机都具备超高可定制化设计,每个按键和摇杆都可以重新定义其键值和功能,让你可以设计出无限的可能,更好地贴合你的项目需求。

特性

  • 主控器选型:Arduino Leonardo
  • 电源:三节AAA电池或USB供电
  • 可编程资源:
    • 两个模拟量摇杆
    • 两个摇杆按键
    • 17个个性按键
  • 编程接口 ICSP(需使用专用USB转ICSP接线)
  • 有一个RESET按钮(标称ANALOG)
  • 可编程的LED
    • MODE:表示开关状态
    • RX:可编程的LED,根据需要自由编程
  • 支持XBB、蓝牙、RF和WIFI

程序下载连接图

GamePad v2.0 内部结构图

引脚定义

  • 无线模块(串口):D0,D1
  • 1:D9
  • 2:D11
  • 3:D12
  • 4:D10
  • UP:D5
  • LEFT::D6
  • DOWN:D7
  • RIGHT:D8
  • SELECT:D3
  • START:D4
  • 左JOY:X-A4,Y-A5
  • 左JOY_BUTTON:A0
  • 右JOY:X-A2,Y-A3
  • 右JOY_BUTTON:A1
  • 左Z1:D15 Z2:D16
  • 右Z1:D13 Z2:D14
  • MOTOR:D2
  • RXLED:D17
  • ANALOG:RESET

按键测试代码

warning_yellow.png
使用xbee/ Ble-Link等模块时请将Serial改为Serial1''',本程序只用于电脑上的串口调试。
/*
// #
// # Editor     : Tong Hui from DFRobot, based on Lauren from DFRobot v1.0 code
// # Date       : 12.24.2012

// # Product name: Wireless Joystick v2.2 for Arduino
// # Product SKU : DFR0182
// # Code Version: 2.0

// # Description:
// # The sketch for using the gamepad and print the button state and the analog values of the gamepad
// #

*/

int buttonState[17];
int joystick[4];
int AnalogButton[2];

void setup()
{
  Serial.begin(57600);  //Init the Serial baudrate
  InitIO();             // Initialize the inputs/outputs and the buffers
}

void InitIO(){
  for(int i = 0; i < 17; i++) pinMode(i, INPUT);
}

void loop()
{
  DataUpdate();  //read the buttons and the joysticks data
  printData();   //print the datas and states
  delay(100);
}

void DataUpdate(){

  for(int i = 3; i < 17; i++)  buttonState[i] = digitalRead(i);
  buttonState[0] = analogRead(0);
  buttonState[1] = analogRead(1);
  for(int i = 0; i < 4; i++)  joystick[i] = analogRead(i);
  for(int i = 4; i < 6; i++)  AnalogButton[i-4] = analogRead(i);

}

String Buttons[17] = {
  "J2","J1","NULL","S2","S1","UP","LEFT","DOWN","RIGHT","1","4","2","3","RZ1","RZ2","LZ1","LZ2"};
  // Buttons Nmes

void printData(){
  for(int i = 0; i < 17; i++)  Serial.print(buttonState[i]),Serial.print(" ");
  for(int i = 0; i < 4; i++)  Serial.print(joystick[i]),Serial.print(" ");
  for(int i = 0; i < 2; i++)  Serial.print(AnalogButton[i]),Serial.print(" ");
  Serial.println("");
  Serial.print("Button Pressed:");
  for(int i = 0; i < 2; i++)  if(buttonState[i] < 100)  Serial.print(Buttons[i]),Serial.print(",");
  for(int i = 3; i < 17; i++)  if(buttonState[i] == 0)  Serial.print(Buttons[i]),Serial.print(",");
  Serial.println("");
  Serial.print("Analog Sticks:");
  for(int i = 0; i < 4; i++)  Serial.print(joystick[i]),Serial.print(",");
  for(int i = 0; i < 2; i++)  Serial.print(AnalogButton[i]),Serial.print(",");
  Serial.println("");
  Serial.println("");
}