ArdunioJoystickLibrary ButtonState Preference

Здравствуйте! В настоящее время я использую ArduinoJoystickLibrary от MHeironimus, у меня есть трехкнопочная игровая панель, с которой у меня возникают проблемы. Моя кнопка на контакте 2 обычно включена, как я могу изменить это в коде, чтобы состояние обычно было выключено.

Я действительно понятия не имею, я просто изменил код джойстика клавиатуры + кнопки, чтобы заставить его работать должным образом, мне просто нужно иметь возможность контролировать начальное состояние каждой из кнопок, потому что иногда переключатели / кнопки могут быть перевернуты.

Сначала я подумал, что это можно сделать с помощью этой части:

// Last state of the button
int lastButtonState[3] = {0,0,0};

Где бы я просто изменил это {0,0,0} нравится это {0,1,0} тогда моя кнопка на контакте 3 будет нормально включена или HIGH, Но нет. По сути, мне просто нужно иметь возможность контролировать каждое из трех состояний кнопок на лету, потому что я никогда не знаю, как будет реагировать переключатель / кнопка из моего огромного набора переключателей / кнопок.

Смотрите код ниже:

#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);
}

1 ответ

Решение

Определите, какие кнопки вы хотите щелкнуть:

bool flipButtons[3] = {false, true, false};

и затем используйте его, чтобы перевернуть, когда вы читаете состояние кнопки:

int currentButtonState = !digitalRead(index + pinToButtonMap) ^ flipButtons[index];
Другие вопросы по тегам