Хочу сделать так: один джойстик выполняет функция ходьбы влево, вправо, вперед, назад, его пины такие: ось X - A3, ось Y - A2 и SW - 2. другой джойстик движение оси камеры по оси икс и игрик, пины такие: ось X - A1,ось Y - A0 и SW - 3. Все запитано и заземлено.
Однако компьютер видит плату как HID-устройство через раз (в Arduino IDE я ставил свою плату как Leonardo, и как Micro, работал и тот, и тот вариант, но через раз). Как это пофиксить?
Использовал библиотеку Joystick, вот ссылка на гитхаб: GitHub - MHeironimus/ArduinoJoystickLibrary: An Arduino library that adds one or more joysticks to the list of HID devices an Arduino Leonardo or Arduino Micro can support..
Вот код:
#include <Joystick.h>
// Определяем пины для кнопок и джойстиков
// Джойстик движения
const int moveJoystickXAxis = A3;
const int moveJoystickYAxis = A2;
const int moveJoystickButton = 2;
// Джойстик камеры
const int cameraJoystickXAxis = A1;
const int cameraJoystickYAxis = A0;
const int cameraJoystickButton = 3;
// Инициализируем Joystick библиотеку
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_GAMEPAD,
6, 0, true, true, false, false, false, false, false, false, false, false, false);
void setup() {
// Инициализируем пины кнопок
pinMode(moveJoystickButton, INPUT_PULLUP);
pinMode(cameraJoystickButton, INPUT_PULLUP);
// Инициализируем джойстик
Joystick.begin();
}
void loop() {
// Обработка кнопок джойстиков
Joystick.setButton(0, !digitalRead(moveJoystickButton)); // Кнопка движения
Joystick.setButton(1, !digitalRead(cameraJoystickButton)); // Кнопка камеры
// Обработка осей джойстика движения
int moveX = analogRead(moveJoystickXAxis);
int moveY = analogRead(moveJoystickYAxis);
moveX = map(moveX, 0, 1023, -127, 127);
moveY = map(moveY, 0, 1023, -127, 127);
Joystick.setXAxis(moveX);
Joystick.setYAxis(moveY);
// Обработка осей джойстика камеры
int cameraX = analogRead(cameraJoystickXAxis);
int cameraY = analogRead(cameraJoystickYAxis);
cameraX = map(cameraX, 0, 1023, -127, 127);
cameraY = map(cameraY, 0, 1023, -127, 127);
Joystick.setRxAxis(cameraX); // Используем RX и RY для второй оси
Joystick.setRyAxis(cameraY);
delay(10);
}