Способы подключения игрового геймпада к Ардуино - есть ли?

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
Народ, всех приветствую, нужна помощь по вот такому вопросу:

В наличии имеется игровой геймпад, который подключается к компьютеру через ЮСБ.
При вскрытии обнаружилось, что за передачу данных отвечает какая-то микросхема, залитая "пластиком". Номера микросхемы не видно - на плате не подписано.
Геймпад самый обычный: 2 джойстика/стика, плюс суммарно 19 кнопок.

Я так понял, микросхема всё это собирает и сжимает в какой-то последовательный пакет неизвестно на каком протоколе.

Хочется подключить его к Ардуино. Но столько ножек банально нет.

Смотрел в сторону готовых беспроводных геймпадов специально под ардуино - но это не то, надо именно проводное соединение.

Есть ли способ - может библиотеки готовые или ещё что, чтобы этот пакет данных скормить ардуино по двум-трем проводам?
Спасибо.
 

poty

★★★★★★✩
19 Фев 2020
3,218
937
Уточните задачу. Насколько я понял, готовый геймпад планируется раздербанить, оставив только кнопки? Которые потом передать на модуль Ардуино?
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@poty, Да, всё верно - использовать на Ардуино. Желательно Нано.
Кнопок по факту 19 - ещё 2 нашлись под стиками.

Пока что есть мысль использовать костыли- кнопки вряд ли будут использоваться одновременно, так что можно будет сделать аналог резестивной клавиатуры - повесив их на общий AnalogRead.
 

poty

★★★★★★✩
19 Фев 2020
3,218
937
Ну, это будут, действительно костыли. На самом деле вполне можно использовать parallel-to-serial регистры (их много, на самом деле, ну, хоть бы и 74HC165 ). Всё зависит от наличия питания и места.
 
  • Лойс +1
Реакции: derungebundener

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@poty, Ух ты, спасибо огромное. Пойду читать подробнее. Вообще не знал про такую штуку...

@poty, И ещё вопрос - как правильно сформулировать запрос, чтобы нагуглить про работу с этими регистрами на ардуино (чтение пришедших данных и рассовывание их по переменным, что выделены для состояния кнопок) и также нагуглить про их объединение (8 бит не хватит на 19 кнопок, надо 3)? Спасибо.
 

poty

★★★★★★✩
19 Фев 2020
3,218
937
Например, вот. Искал по "74hc165 arduino".
Для подключения большего количества можно соединить последовательно, можно подключить к разным пинам Ардуино. Всё зависит от конечной цели.
 
  • Лойс +1
Реакции: derungebundener

DenCo

✩✩✩✩✩✩✩
9 Май 2021
1
0
Добрый день темы про подключения двух стиков не нашёл, задам вопрос здесь.
Дано:
1) 2 джойстика Quick Shot подключение через game port (на ось X/Y по ползонкувому потенциометру (в исходном виде работали как реостат) + 2 кнопки)
2) Аналог Arduino Leonardo
образцом взят скетч от ждойстика для авиасимулятора. В котором используется стик и два потенциометра (из кода для этих потенциометров в коде описаны как RZ и (на 100% на уверен но скорее всего РУД), хотелось бы сделать второй стик) и 3 кнопки.
С добавлением 4-ой кнопки разобрался
Проект: Эмуляция оператора экскаватора для игрушки Gold Rush
Непосредственно код (потенциометры на пинах А3 и А2):

//Define and Allocate Input Pins to memorable names
#define joyX A0
#define joyY A1
#define joyRZ A3
#define joyThrottle A2
#define joyButton1 9
#define joyButton2 8
#define joyButton3 7
#define joyButton4 6

//Initializing Axis as Integers, at a 0 default value
int xAxis_ = 0;
int yAxis_ = 0;
int rzAxis_ = 0;
int throttle_ = 0;

//Setting up Buttons
//Updating a static variable gives greater stability than reading directly from the digital pin.
//Giving Default Values to the Buttons for later use
int lastButton1State = 0;
int lastButton2State = 0;
int lastButton3State = 0;

//Defining the Joystick
//The Joystick is defined in the following setup:
//Joystick(Joystick HID ID, Joystick Type, Button Count, Hat Switch Count, Include X, Include Y, Include Z, Include Rx, Include Ry, Include Rz, Include Rudder, Include Throttle, Include Accelerator, Include Brake, Include Steering
//Joystick HID ID: A Hex value identifier for HID Device Recognition (default: 0x03). DO NOT USE 0x01 or 0x02
//Joystick type: Define the type of joystick from the types supported. Types: DEFAULT Joystick (0x04 or JOYSTICK_TYPE_JOYSTICK), Gamepad (0x05 or JOYSTICK_TYPE_GAMEPAD), Multi-Axis Controller (0x08 or JOYSTICK_TYPE_MULTI_AXIS)
//Button Count: Number of Buttons shown to HID system (default: 32)
//Hat Switch Count: Number of Hat Switches, max 2. (default:2) Здесь вроде как говорится, что 2 переключателя шляпы
//Include X Axis: Determines whether the X axis is avalible for used by the HID system, defined as a bool value (default:true)
//Include Y Axis: Determines whether the Y axis is avalible for used by the HID system, defined as a bool value (default:true)
//Include Z Axis: Determines whether the Z axis is avalible for used by the HID system, defined as a bool value (default:true)
//Include Rx Axis: Determines whether the X Rotational axis is avalible for used by the HID system, defined as a bool value (default:true)
//Include Ry Axis: Determines whether the Y Rotational axis is avalible for used by the HID system, defined as a bool value (default:true)
//Include Rz Axis: Determines whether the Z Rotational axis is avalible for used by the HID system, defined as a bool value (default:true)
//Include Rudder: Determines whether a Rudder axis is avalible for used by the HID system, defined as a bool value (default:true)
//Include Throttle: Determines whether a Throttle axis is avalible for used by the HID system, defined as a bool value (default:true)
//Include Accelerator: Determines whether an Accelerator axis is avalible for used by the HID system, defined as a bool value (default:true)
//Include Brake: Determines whether a Brake axis is avalible for used by the HID system, defined as a bool value (default:true)
//Include Steering: Determines whether a Steering axis is avalible for used by the HID system, defined as a bool value (default:true)

Подскажите/помогите как прописать второй джойстик как стик.
P.S Заранее благодарю. С уважением Денис.