我正在尝试使用非品牌 ATmega32U4 板创建一个简单的2轴,2键操纵杆,该板注册为 Arduino Leonardo 。
我在Arduino IDE的串行监视器上运行得很好,它在“设备和打印机”中显示为具有正确输入量的游戏控制器,但由于某种原因,串行数据不是转移到游戏控制器测试对话框,因此操纵杆无法在串行监视器外工作。
这是我与Arduino的第一个项目,所以我确定我在这里只是遗漏了一些简单的东西,但老实说,我很难过。
在耗尽了所有Google-fu之后,以及一些试验和错误,这是我能想到的最好的,所以我很感激我能得到的任何帮助,以使其正常工作。我正在使用THIS操纵杆库。
// Pin A2 = X Axis
// Pin A3 = Y Axis
// Pin 16 = Button 1
// Pin 10 = Button 2
//
//--------------------------------------------------------------
#include "Joystick.h"
// 2 Buttons, No hats, X and Y axis, no Z axis, Rx, Ry, Rz, Rudder, Throttle, Brake, or Steering
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_JOYSTICK, 2, 0, true, true, false, false, false, false, false, false, false, false, false);
void setup() {
Serial.begin(9600);
while (!Serial) {
;
}
pinMode(A2, INPUT);
pinMode(A3, INPUT);
pinMode(16, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
Joystick.begin();
Joystick.setXAxisRange(-512, 512);
Joystick.setYAxisRange(-512, 512);
}
void loop() {
// X-Axis
int xAxis = analogRead(A2);
Joystick.setXAxis(xAxis);
Serial.println(xAxis);
// Y-Axis
int yAxis = analogRead(A3);
Joystick.setYAxis(yAxis);
Serial.println(yAxis);
// Button 1
int button1State = !digitalRead(16);
if (button1State = 1)
{
Joystick.pressButton(0);
}
// Button 2
int button2State = !digitalRead(10);
if (button2State = 1)
{
Joystick.pressButton(1);
}
}
我在循环中添加了延迟,我认为这似乎解决了我的问题(并让我注意到另一个问题),但由于某种原因,它似乎只能工作 part 。 ..有时它的工作正常,有时候测试对话框没有注意到我的输入,有时候对话框只是冻结...以下是我所做的更改:
// X-Axis
int xAxis = analogRead(A2);
Joystick.setXAxis(xAxis);
Serial.println(xAxis);
delay(50);
// Y-Axis
int yAxis = analogRead(A3);
Joystick.setYAxis(yAxis);
Serial.println(yAxis);
delay(50);
// Button 1
int button1State = !digitalRead(16);
if (button1State == 1)
{
Joystick.pressButton(0);
delay(50);
}
// Button 2
int button2State = !digitalRead(10);
if (button2State == 1)
{
Joystick.pressButton(1);
delay(50);
}
答案 0 :(得分:3)
您可能希望在'内使用==检查是否相等的语句,现在无论输入如何都分配值1.
答案 1 :(得分:1)
在尝试了其他所有事情后,我决定尝试评论所有的串行通信,现在它可以工作了!我没有足够的经验与Arduino知道我写的串行通信的哪些部分搞乱了,但是我的草图在没有它的情况下工作得很好。 (除了我的一个按钮,但我认为这可能只是一个错误的引脚)
这是我最终得到的,以防其他人认为这有用:
// Pin A2 = X Axis
// Pin A3 = Y Axis
// Pin 16 = Button 1
// Pin 10 = Button 2
//
//--------------------------------------------------------------
#include "Joystick.h"
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_JOYSTICK, 2, 0, true, true, false, false, false, false, false, false, false, false, false);
void setup() {
pinMode(A2, INPUT);
pinMode(A3, INPUT);
pinMode(16, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
Joystick.begin();
}
void loop() {
// X-Axis
int xAxis = analogRead(A2);
Joystick.setXAxis(xAxis);
// Y-Axis
int yAxis = analogRead(A3);
Joystick.setYAxis(yAxis);
// Button 1
int button1State = !digitalRead(16);
if (button1State == 1)
{
Joystick.pressButton(0);
}
else
{
Joystick.releaseButton(0);
}
// Button 2
int button2State = !digitalRead(10);
if (button2State == 1)
{
Joystick.pressButton(1);
}
else
{
Joystick.releaseButton(1);
}
delay(50);
}
答案 2 :(得分:1)
int main (void)
等待打开串行连接。当您打开Arduino IDE的串行监视器时,您的代码就会开始执行。如果您没有,代码将无法运行,并且不会向PC发送任何输入。
删除
while (!Serial)
它仅用于调试,因此程序在您打开串行监视器时启动,并且您不会在开始时错过任何调试消息。