在这记录minecraft的点点滴滴。

作者:linfengfeiwu2018-12-21 9:52分类: 笔记 标签: Arduino

虽然说买一个简易的手柄也就几十块钱,效果还比这个好很多,但总是想自己做一个玩玩。

所用材料:

arduino leonardo板子一个,

arduino mega2560外壳一个,

JoyStick Shield手柄扩展板一个。

将上述物品组装在一起,如图:

微信截图_20181225172718.jpg

接着就是能够实现手柄功能的代码:

#include <Joystick.h>

#define RANGE 30

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
  7, 0,                  // Button Count, Hat Switch Count
  true, true, false,     // X and Y, but no Z Axis
  false, false, false,   // No Rx, Ry, or Rz
  false, false,          // No rudder or throttle
  false, false, false);  // No accelerator, brake, or steering

void setup() {
  // Initialize Button Pins
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);

  // Initialize Joystick Library
  Joystick.begin();
  Joystick.setXAxisRange(-1, 1);
  Joystick.setYAxisRange(-1, 1);

  Serial.begin(115200);
}

// Last state of the buttons
int lastButtonState[7] = {0,0,0,0,0,0,0};
int X,oldX;
int Y,oldY;

void loop() {


  // Read pin values
  for (int index = 0; index < 7; index++)
  {
    int currentButtonState = !digitalRead(index + 2);
    if (currentButtonState != lastButtonState[index])
    {
      Joystick.setButton(index, currentButtonState);
      lastButtonState[index] = currentButtonState;
     
    }
  }
  X=analogRead(A0);
  Y=analogRead(A1);
  if ((X!=oldX) || (Y!=oldY))
    {
      if ((X>=512-RANGE) && (X<=512+RANGE))
            {Joystick.setXAxis(0);}
      else
        if (X>512+RANGE)
            {Joystick.setXAxis(-1);}
        else
            {Joystick.setXAxis(1);}

      if ((Y>=512-RANGE)&&(Y<=512+RANGE))
            {Joystick.setYAxis(0);}
      else
        if (Y>512+RANGE)
              {Joystick.setYAxis(-1);}
        else
              {Joystick.setYAxis(1);}
      oldX=X; oldY=Y;       
     
    }    
       
  delay(10);
}
所用到的库文件:https://github.com/MHeironimus/ArduinoJoystickLibrary


其中有些参数可以根据需要酌情修改。

扩展版引脚定义:

X值接A0口
Y值接A1口
A接D2
B接D3
C接D5
D接D4
E接D6
F接D7

下载完程序,连上电脑就能识别成一个手柄了,但现在还没有按键映射,这里还需要另一个工具Xpadder(点击下载),利用这个来完成按键的映射。推荐使用提供的这个老版本,功能够用操作简单,新版在win10上好像有点问题。软件使用很简单,新建配置文件和映射文件即可。

最后一切搞定,来吧小时候的魂斗罗~

参考连接:

https://www.arduino.cn/thread-46192-1-2.html

https://www.jianshu.com/p/9fc765524050


温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51

已有 0/392 人参与

发表评论:

欢迎使用手机扫描二维码访问本站~