ArdunioJoystickLibrary ButtonState 首选项
ArdunioJoystickLibrary ButtonState Preference
您好,我目前正在使用 MHeironimus 的 ArduinoJoystickLibrary,我有一个 3 键游戏手柄,但我遇到了问题。我的pin 2上的按钮常亮,如何在代码中反转它,使状态常闭。
我真的不知道,我只是修改了键盘+按钮操纵杆的代码让它正常工作,我基本上只需要能够控制每个按钮的初始状态,因为有时switches/buttons 可能会反转。
一开始我以为这部分可以搞定:
// Last state of the button
int lastButtonState[3] = {0,0,0};
如果我只是将此 {0,0,0}
更改为 {0,1,0}
,那么我在引脚 3 上的按钮通常会打开或处于 HIGH
中。但是没有。基本上我只需要能够动态控制 3 个按钮状态中的每一个,因为我永远不知道 switch/button 将如何从我的 switches/buttons.
的巨大桶中做出反应
查看下面的代码:
#include <Joystick.h>
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
3, 0, // Button Count, Hat Switch Count
false, false, 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);
// Initialize Joystick Library
Joystick.begin();
}
// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 2;
// Last state of the button
int lastButtonState[3] = {0,0,0};
void loop() {
// Read pin values
for (int index = 0; index < 3; index++)
{
int currentButtonState = !digitalRead(index + pinToButtonMap);
if (currentButtonState != lastButtonState[index])
{
if (index < 4) {
Joystick.setButton(index, currentButtonState);
lastButtonState[index] = currentButtonState;
} else {
if (currentButtonState) {
Joystick.setButton(index, currentButtonState);
lastButtonState[index] = currentButtonState;
}
}
}
}
delay(10);
}
定义要翻转的按钮:
bool flipButtons[3] = {false, true, false};
然后用它翻转它,当你读取按钮状态时:
int currentButtonState = !digitalRead(index + pinToButtonMap) ^ flipButtons[index];
您好,我目前正在使用 MHeironimus 的 ArduinoJoystickLibrary,我有一个 3 键游戏手柄,但我遇到了问题。我的pin 2上的按钮常亮,如何在代码中反转它,使状态常闭。
我真的不知道,我只是修改了键盘+按钮操纵杆的代码让它正常工作,我基本上只需要能够控制每个按钮的初始状态,因为有时switches/buttons 可能会反转。
一开始我以为这部分可以搞定:
// Last state of the button
int lastButtonState[3] = {0,0,0};
如果我只是将此 {0,0,0}
更改为 {0,1,0}
,那么我在引脚 3 上的按钮通常会打开或处于 HIGH
中。但是没有。基本上我只需要能够动态控制 3 个按钮状态中的每一个,因为我永远不知道 switch/button 将如何从我的 switches/buttons.
查看下面的代码:
#include <Joystick.h>
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
3, 0, // Button Count, Hat Switch Count
false, false, 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);
// Initialize Joystick Library
Joystick.begin();
}
// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 2;
// Last state of the button
int lastButtonState[3] = {0,0,0};
void loop() {
// Read pin values
for (int index = 0; index < 3; index++)
{
int currentButtonState = !digitalRead(index + pinToButtonMap);
if (currentButtonState != lastButtonState[index])
{
if (index < 4) {
Joystick.setButton(index, currentButtonState);
lastButtonState[index] = currentButtonState;
} else {
if (currentButtonState) {
Joystick.setButton(index, currentButtonState);
lastButtonState[index] = currentButtonState;
}
}
}
}
delay(10);
}
定义要翻转的按钮:
bool flipButtons[3] = {false, true, false};
然后用它翻转它,当你读取按钮状态时:
int currentButtonState = !digitalRead(index + pinToButtonMap) ^ flipButtons[index];