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];