Java Arduino与Xbox 360控制器的接口:游戏控制升级版

Java Arduino与Xbox 360控制器的接口:游戏控制升级版,java,arduino,processing,Java,Arduino,Processing,最近,我一直在尝试使用有线Xbox 360控制器与我的Arduino Uno(通过处理)接口,我正在测试电路中使用该控制器来控制两个刷式电机。我看到了一段视频,它使用图书馆控制一个伺服电机,还有图书馆作者制作的。我对代码做了一些修改(从第一个链接开始),只是为了支持两个马达,它可以正常工作(有点)。唯一的问题是它接受来自蓝牙鼠标的输入,而不是Xbox控制器的输入,Xbox控制器都连接到我笔记本电脑的USB端口。我设置文本配置文件,以便“按钮0”和“按钮2”——分别对应于A和X按钮——使Ardui

最近,我一直在尝试使用有线Xbox 360控制器与我的Arduino Uno(通过处理)接口,我正在测试电路中使用该控制器来控制两个刷式电机。我看到了一段视频,它使用图书馆控制一个伺服电机,还有图书馆作者制作的。我对代码做了一些修改(从第一个链接开始),只是为了支持两个马达,它可以正常工作(有点)。唯一的问题是它接受来自蓝牙鼠标的输入,而不是Xbox控制器的输入,Xbox控制器都连接到我笔记本电脑的USB端口。我设置文本配置文件,以便“按钮0”和“按钮2”——分别对应于A和X按钮——使Arduino上的两个引脚变高,这两个引脚馈入控制电机的两个晶体管的基座。相反,我的蓝牙鼠标上的鼠标左键和滚轮按钮控制这些输出

我有点困惑为什么会发生这种情况,我尝试了一些不同的方法来解决这个问题。我认为在创建配置文件(带有库附带的程序)时,我无意中选择了鼠标作为输入设备,因此我创建了另一个配置文件,只是为了确保情况并非如此,尽管我不确定配置文件中的什么指示了要使用的正确设备。也许我遗漏了一些非常明显的东西,我只知道我需要第二双眼睛来帮我检查。如果您有使用本图书馆的经验,我们将非常感谢您的帮助,谢谢

/////////////////////////////////////////////////////////////////////////////////////////////////////////

配置文件:

Tests the xbox controller with motors.
lMotor  Left Motor  1   BUTTON  Button 0    0   0.0 0.0
rMotor  Right Motor 1   BUTTON  Button 2    0   0.0 0.0
/////////////////////////////////////////////////////////////////////////////////////////////////////////

来自处理的Java:

import processing.serial.*;

import net.java.games.input.*;
import org.gamecontrolplus.*;
import org.gamecontrolplus.gui.*;

import cc.arduino.*;
import org.firmata.*;

ControlDevice cont;
ControlIO control;

Arduino arduino;

//variables for the "A Button" and "X Button" on the xbox controller
ControlButton aButton;
ControlButton xButton;

//needed variables of type int for background function to work (change window color when buttons are pressed)
int aInt;
int xInt;

void setup() {
  size(360, 200);
  
  control = ControlIO.getInstance(this);
  cont = control.getMatchedDevice("xboxtest");
  
  if(cont == null) {
    println("Error, something went wrong");
    System.exit(-1);
    
  }
  //println(Arduino.list());
  arduino = new Arduino(this, Arduino.list()[0], 57600);
  arduino.pinMode(8, Arduino.OUTPUT);
  arduino.pinMode(11, Arduino.OUTPUT);
  
}

//gets the input and is called in the looping function (void draw)
public void getUserInput() {
  //rMotor and lMotor are references to the configuration file
  aButton = cont.getButton("lMotor");
  xButton = cont.getButton("rMotor");
  
  aInt = 0;
  xInt = 0;
  
  if (aButton.pressed() == true) {
    aInt = 1;
    
  }
  
  if (xButton.pressed() == true) {
    xInt = 1;
    
  }
  
  
}

void draw() {
  getUserInput();
  
  //changes the color of the interactive window when the input changes
  background(100 * aInt, 100, 100 * xInt);
  
  arduino.digitalWrite(8, aInt * 255);
  arduino.digitalWrite(11, xInt * 255);

}

更新:在查看了库提供的一些我以前不知道的示例代码之后,我能够修复这个问题。在我的辩护中,这个库几乎没有得到支持,我观看的视频没有使用我在示例中找到的代码行。我希望这对将来的人有好处

我最终改变了这一点:

cont = control.getMatchedDevice("xboxtest");
为此:

cont = control.filter(GCP.GAMEPAD).getMatchedDevice("xboxtest");