Джойстик для компьютера из клавиатуры
Похожую самоделку мы уже делали своими силами, только в ней мы согласовывали джойстик от приставки «Денди» с аппаратной частью компьютера по средствам специальной программы. Здесь же мы будем просто напросто переделывать обычную компьютерную клавиатуру в джойстик.
Что же нам понадобится. Любая клавиатура (желательно с USB шиной для удобства), но естественно рабочая. Любой джойстик от любой приставки, любого производителя, даже нерабочий можно. Главное чтобы внутри него уместилась еще одна плата сверху.
Я взял вот такой вот «толстенький» джойстик.

Кратенько расскажу нашу задачку, думаю, Вы все поймете.
Не знаю знаете ли Вы или нет, что клавиатура и джойстик работаю похожим образом. А именно в каждом из этих устройств применен принцип шифрования команд. Это сделано для того чтобы можно было выводить как можно меньше проводов из устройства. К примеру, если на каждую кнопку из клавиатуру выводить хотя бы по одному проводу, то получится уже очень много. И поэтому было решено их шифровать и переводить в импульсы.
В клавиатуре, в отличие от джойстика применен принцип перекрестного включения кнопок, то есть к плате клавиатуры от кнопок идет где-то около десятка, а уже из платы 4 или 5 в зависимости от интерфейса устройства.
Приступим к действиям. Вытаскиваем из джойстика плату и с помощью отвертки перерубаем все контакты от родной микросхемы.

Далее припаиваем к каждому контакту по паре проводков. А эти пары припаиваем к плате от компьютерной клавиатуры.
JoyToKey — программа эмуляции клавиатуры с геймпада
JoyToKey позволяет использовать геймпад в большинстве программ и приложений (браузерные игры, Флеш-игры, офисные приложения и даже Windows в целом).
То есть во время нажатия кнопки на геймаде или движения стиком, происходит эмуляция нажатия определенных кнопок клавиатуры или движения мыши.
Или скачать также с корявым, но русским переводом:
joytokey-rus.exe [1022.6 Kb] (cкачиваний: 20783)
Программа бесплатна лишь на ограниченный период времени, вы можете побаловаться а потом либо купить лицензию, либо. сами найдете.
Как использовать клавиатуру как джойстик — 4 популярных эмулятора
Разработчики, создающие цифровые продукты, и поставщики железа конкурируют между собой. Часто это выводит из равновесия геймеров, для которых эмуляция джойстика на клавиатуре будет безальтернативной. Людям приходится искать переходники и многофункциональные утилиты, которые на 100% работают. Речь идет о ситуациях, когда управление универсально для всех.

Многие игры для ПК и Mac практически не совместимы с контроллерами других брендов, особенно конкурирующих производителей. Подобное связано с желанием поставить на рынок оригинальный продукт, не имеющий аналогов.
Изобилие брендов заставляет геймеров склоняться к универсальным решениям. Разберем, как переназначить кнопки контроллера на клавиши клавиатуры, чтобы обойти любое ограничение. Алгоритм зависит от того, какая игра в приоритете и установлена ли дополнительная программа.
Зачем из клавиатуры делать геймпад?
Выбор оборудования определяет комфорт геймплея. Часто это основная причина почему люди хотят выяснить, как подключить клавиатуру как геймпад. У каждого решения свои преимущества и недостатки.

Относительно предпочтений игроки разделены на 2 лагеря. Выбирающие устройство должны учесть объективные преимущества и недостатки каждого решения. Есть несколько аргументов:
Геймпад подходит для файтинга, слешера и платформера. Если для продвижения по сюжету нужно большое количество движений и скачков, контроллер незаменим. Для стратегий и шутеров больше подходит клавиатура.
Некоторые версии «адаптированы» для конкретного устройства, то есть не работают на всех приборах, даже самых современных. Прежде чем выбрать геймпад или клавиатуру, обязательно прочитайте описание и технические возможности оборудования, учтите обзоры игры
Для мобильных аппаратов не все так гладко. Большинство моделей не имеют подходящего USB-порта. Из-за технических нюансов прямое подключение невозможно. Придется искать кабель USB OTG. Такой переходник можно найти практически в каждом магазине.

Если поддержка OTG не предусмотрена или лучше обойтись без кабелей, просто подключите беспроводные аналоги. Большинство девайсов имеет встроенный Bluetooth 5.0.
Как подключить клавиатуру как джойстик: инструкции для разных эмуляторов
Современные контроллеры не требуют настройки. Как и добавление клавиатуры к ПК, их интеграция в систему займет 10-15 секунд. ОС автоматически находит драйвер и сообщает о том, что оборудование готово к использованию. Но для изменения функциональности придется повозиться. Это потому, что функцию, которую выполняет каждая клавиша или комбинация, придется менять вручную.

Большинство игр для десятки оптимизированы под Xbox. Элементы управления уже будут сопоставлены. Просто получите доступ к настройкам, чтобы понять, какая кнопка или джойстик за что отвечает. Для других девайсов придется покупать переходник и устанавливать дополнительную утилиту.
Universal Control Remapper
Утилита для переназначения функций и контроллеров популярна среди геймеров. Программу расхваливают в своих отзывах сотни пользователей. Если есть желание вместо геймпада добавить аналог, инструмент незаменим. Алгоритм настройки и дальнейшей кастомизации следующий:
- Загрузите архив с UCR драйверами. Просто посетите сайт компании разработчика и кликните Download, выберите целевой каталог.
- Распакуйте эмулятор геймпада для клавиатуры в удобное место на диске, запустите ucr.exe.
- Создайте профиль с помощью специальной кнопки.
- Добавьте два плагина на две оси ButtototoAksis и Mousetojoy. Установите нужную комбинацию выбрав VJOY_1 и Axis_1, 2, 3 и 6. Задайте клавиши A, D, W, S.
- Сохраните изменения.

С утилитой Universal Control Remapper можно переназначить любое количество входов на любое количество выходов. Порядок устройств сохраняется после перезагрузки и отключения. Другие преимущества:
- профили могут переключаться внешними программами через параметры командной строки (CLI);
- заявлена поддержка HidGuardian через HidCerberus;
- совместимо с играми, использующими технологии защиты от несанкционированного доступа, такие как Denuvo.
Последнюю версию Universal Control Remapper можно загрузить с GitHub вместе с рядом основных плагинов. Дополнительные экспериментальные или нишевые плагины можно найти в репозитории UCR-Plugins. Также может потребоваться установить другие драйверы, чтобы разрешить создание виртуальных контроллеров Xbox или DirectInput.
X360ce
Это приложение, разработанное, чтобы помочь ПК получить доступ к другому внешнему USB -геймпаду. После скачивания файла алгоритм следующий:
- Создайте папку на ПК (предпочтительно не на системном диске).
- Разархивируйте инсталлятор в уже подготовленный каталог.
- Найдите файл *.exe (пиктограмма с джойстиком).
- Контекстным меню выберите «Run as Administrator».
- Подключите оборудование и убедитесь, что он работает правильно, для него найдены драйверы.
- Откройте меню и задайте кнопки на x360CE. Просто перейдите в Settings, кликните «Добавить». Проверьте следующие поля: com, stop, ll, wt, pidvid, все 32-битные файлы x-input и d-input.

Во время первого запуска на экране пользователя появится окно настройки. Алгоритм кастомизации предложит применить готовые параметры. Данная функция неэффективна. Совершенно разные геймпады, в том числе фирменные, отображаются под одинаковым названием: «PC Twin shock» или «USB Vibration Joystick».
Чтобы ускорить процесс, начните настройку с нуля. В главном окне программы есть вкладка — Controller 1-4. Цветные блоки панели показывают статус подключения:
После добавления оборудования проверьте функциональность и то, как это влияет на комфорт. Установка чувствительности важна для комфортной игры. Чем дешевле оборудование, тем хуже работают эта функция. Проблема ощущается в играх, основанных на Dark Souls и Assassin’s Elreed.
Joy2Key
Назначение программы Joytokey — обеспечить управление компьютером с помощью USB/Bluetooth оборудования. Приложение моделирует курсор клавиатуры и мыши при использовании GamePad (манипуляторы, рули мультимедийного управления, шлемы VR и прочее). Меню программы состоит из 2 блоков:

Эмулятор джойстика для клавиатуры, предложенный данной компанией отличается следующими преимуществами:
- Бесплатное программное обеспечение позволяет связывать комбинации клавиш с контроллером Xbox 360 или другими моделями.
- Можно сохранять готовые профили.
- Автоматическое переназначение.
- Подходит для управления браузером, офисным пакетом программ, можно использовать даже в Виндовс.
Joytokey создан для добавления до 16 джойстиков. Платная версия стоит всего 7 долларов США, отправить средства удастся через PayPal или MyCommerce. Отдельная конфигурация включает 32 кнопки и 6 осей. Основная сложность затеи заключается в том, что каждое игровое устройство имеет гораздо больше кнопок, чем на клавиатуре. Проблема решается за счет запуска функций джойстика при нажатии конкретной комбинации клавиш.
Xpadder
Если джойстик не работает, просто используйте Xpadder, чтобы играть в любимые игры без недоразумений и фейлов. Эмулятор способен назначать конкретные макросы и ключи на Xbox 360, что улучшает доступность большинства версий. Но перед тем, как использовать клавиатуру как джойстик, придется разобраться в настройках. Каждая опция задается вручную.
Это одна из лучших версий ПО от легендарной команды Controller Mapper. Платформа позволяет переназначать клавиши, используя в качестве кнопок манипулятора. Через утилиту Xpadder ставят триггеры, назначают альтернативные комбинации, которые проще нажать, и реализовывают прочие геймерские трюки. Инструменты совместимы с более чем 98 процентами игр для ПК, планшетов, смартфоном или ноутбуков.
Использование игровой консоли с клавиатурой и мышью может показаться немного странным и даже не иметь смысла для подавляющего большинства геймеров, но это не так. Большинство игр рассчитано именно на такой тип управления, хотя настройка для разных брендов может отличаться. Процесс зависит от личных привычек игрока.
Есть много причин использовать клавиатуру и мышь с Xbox Series X/S. Это не только потому, что в Microsoft Edge была добавлена полная поддержка оборудования. С эмулятором намного интереснее геймплей, поскольку игрок получает дополнительные преимущества за счет комбинаций клавиш. С клавиатурой у геймера точно не будет проблем совместимости.
То же самое касается смартфонов и планшетов (устройство, на котором выполняются манипуляции, должно поддерживать режим хост-системы). Владельцу планшета нужно скачать эмулятор консоли. После запуска приложения подключают игровой модуль и назначают кнопкам необходимые настройки. При правильном подходе эмуляция займет не больше минуты.
Может ли геймпад заменить клавиатуру? Пробуем программировать на стиках

Для печати на клавиатуре необходимо неподвижно сидеть или стоять. Геймпады, в отличие от них, портативные и компактные. Управляя ими, можно ходить по комнате или прилечь на диван.
Из-за малого количества кнопок на геймпаде никто не рассматривал их как средство ввода объёмных текстов, например, в программировании.
Однако аналоговые стики (а у большинства геймпадов их два) имеют потенциал обеспечения бесконечного количества вариантов ввода. Вопрос сводится к выбору подходящих жестов для максимальной эффективности и минимального напряжения больших пальцев.
Для геймпадов существует множество способов ввода текста. Если вы когда-нибудь играли в консольные игры, то, скорее всего, использовали какой-то из них.

Экранный ввод текста в Legend of Zelda
В Legend of Zelda игрок должен по очереди выбирать буквы при помощи крестовины со стрелками и каждый раз нажимать кнопку подтверждения для добавления буквы в поле ввода текста.
С тех пор были разработаны более эффективные способы ввода. Если вас это заинтересовало, то прочитайте статью на Gamasutra.
К сожалению, все найденные мной способы ввода имеют два серьёзных изъяна, из-за которых они не подходят для серьёзной работы:
- Они недостаточно быстры
- Они требуют визуальной обратной связи
Однако при отсутствии обратной связи все жесты необходимо запоминать и практиковать, пока вы не сможете вводить их с достаточной точностью. Видеоигры вряд ли смогут заставить пользователя потратить пару недель на обучение способу ввода текста, но для способа ввода текста, который можно применять в любой программе, такая цена является приемлемой, а само обучение напоминает освоение сенсорного ввода.
В этом посте я вкратце расскажу об этапах создания системы ввода текста для геймпадов, пригодной в качестве замены объёмного клавиатурного ввода.
Определяемся с жестами
Для начала я создал инструмент визуализации движения аналоговых стиков геймпада на основе pygame языка Python. Для наглядности я дополнил инструмент так, чтобы он не только показывал текущие позиции стиков, но и предыдущие позиции всё более светлых оттенков серого, чтобы вы видели траектории, по которым движутся стики.
На рисунке ниже показаны одновременные движения обоих аналоговых стиков внутрь, вверх, наружу, вниз, снова внутрь и обратно в центр.

Визуализация паттернов движения аналоговых стиков
Первое, что я заметил: поскольку нейтральным состоянием геймпада является нахождение стиков в центре, все варианты ввода должны быть достижимы из этого нейтрального состояния и все они должны завершаться возвратом стиков в центр.
С учётом этих ограничений я выяснил, что простейшим возможным вводом будет перемещение одного из стиков в любом направлении и обратно в центр.

Левый стик переместился вверх и обратно в центр
Сколько направлений и какие именно направления можно точно выбрать вслепую? Рассмотрим следующий пример.

Левый стик переместился вверх, вниз, в центр, влево и вправо, а правый стик двигался по диагонали
Несколько минут экспериментов показали, что можно точно выбирать направления вдоль осей, а ввод в других направлениях был гораздо менее точным (это видно из предыдущего изображения).
Следующими найденными простейшими способами ввода стали одноэтапные и двухэтапные круговые движения.

Левый стик переместился вверх, влево и обратно к центру

Левый стик переместился вверх, влево, вниз и обратно в центр
Учитывая все придуманные пока жесты, мы получили 4 + 8 + 8 = 20 вариантов ввода на каждом стике.
Разумеется, оба стика можно двигать одновременно, создавая комбинированные жесты ввода.

Оба стика одновременно движутся вверх и обратно к центру
При комбинировании жестов в сумме получается 20 * 20 + 20 + 20 = 440 вариантов ввода, чего, по-моему, более чем достаточно.
Кодирование жестов
Я разделил пространство ввода каждого стика на 4 сектора и присвоил каждому сектору число.

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

Круговая пороговая область вокруг центра
Как видите, радиус пороговой области довольно велик. При экспериментах я определил, что это наилучший радиус, обеспечивающий наименьшее количество ошибок.
Когда любой из стиков выходит из центра, пересекая пороговую область, начинается последовательность ввода. Когда оба стика возвращаются в центр внутри пороговой области, последовательность считается завершённой и преобразуется в пару кортежей, описывающих движение стиков.

Перемещения стиков для ввода ((0,), (2, 3))
Привязка жестов к действиям
В данном случае действиями являются просто клавиши клавиатуры. Кнопки-триггеры геймпада можно привязать к клавишам Shift, Ctrl, Alt и Super, что будет удобно, потому что эти клавиши используются в сочетаниях (например, Ctrl-C).
Чтобы определить оптимальную привязку вводимого жеста и клавиши, я в течение нескольких недель записывал при помощи кейлоггера все нажатия клавиш и проанализировал частоту каждой клавиши.
Самые часто нажимаемые клавиши должны быть привязаны к простейшим (а значит, самым быстрым) жестам. Я оценивал сложность жеста сложением длин вводов каждого стика. Например, показанный выше ввод ((0,), (2, 3)) имеет сложность 1 + 2 = 3.
В таком случае при вводе с одного стика попеременное использование двух стиков будет быстрее, чем множественный ввод с одного и того же стика, поэтому часто печатаемые клавиши лучше привязывать к разным стикам.
Следуя этой логике, я сначала сгенерировал все возможные варианты ввода с одного стика и сгруппировал их по сложности. Я посчитал количество вводов в группе каждой сложности и взял количество клавиш из отсортированного списка самых частых клавиш.
Моя цель заключалась в разделении этих клавиш на две группы, одна для ввода левым стиком, вторая — правым. Для нахождения идеальных групп я создал граф, в котором узлы были клавишами, а взвешенные рёбра обозначали частоты комбинаций клавиш.
Я циклически удалял ребро с наименьшим весом, пока граф не стал двудольным. Если граф становился несвязанным, я рекурсивно применял к связанным компонентам алгоритм разбиения, а в конце объединял группы в независимые множества.
Рассмотрим следующий пример. Первая группа сложности состоит из всех вводов со сложностью 1, то есть ((0,), ()), ((1,), ()), ((2,), ()), ((3,), ()), ((), (0,)), ((), (1,)), ((), (2,)), ((), (3,)) .
В этой группе 8 вводов, поэтому мы берём 8 самых частых клавиш из отсортированного списка. Это ‘e’, ‘o’, ‘t’, ‘a’, ‘i’, ‘s’, ‘j’, ‘r’ . Создаём граф с этими клавишами в качестве узлов и назначаем веса рёбрам между этими узлами, соответствующие частоте каждого сочетания клавиш.

Клавиши e и r сочетаются чаще всего, поэтому должны быть привязаны к разным стикам
При удалении слабых рёбер из графа он рано или поздно превращался в несвязанный.

Клавиша j встречается часто, но она изолирована.
Возможно, вы недоумеваете, почему клавиша j является одной из 8 самых частых клавиш, но имеет такие слабые связи с остальными частыми клавишами. Причина заключается в том, что j активно используется при работе с VIM plus, в моей системе это часть комбинации горячих клавиш для переключения между окнами. Поэтому она чаще используется изолированно, чем в тексте.
Так как граф несвязанный, я продолжаю применять алгоритм к связанным компонентам. Подграф, состоящий только из узла j , уже является двудольным ( j + пустое множество). Я рекурсивно применяю алгоритм к другому компоненту.

После удаления самых слабых рёбер компонент становится двудольным
Затем компонент можно без проблем разделить на две группы без рёбер между узлами в группе.

Двудольная схема компонента
В конце я объединяю двудольные множества.

Группировка, получившаяся для первых 8 клавиш
Как видите, самые сильные связи (наиболее частые сочетания клавиш) расположены между узлами на разных сторонах, а именно этого я и добивался.
Я повторил этот процесс для других групп сложности (только для ввода одним стиком.) Затем я сгенерировал все возможные комбинированные вводы, снова сгруппировал их по сложности и назначил оставшиеся клавиши этим вариантам ввода. Так как для комбинированных вводов требуется использование обоих стиков, проблема разделения клавиш на две группы здесь не возникает.
Я применил пакет pyautogui языка Python для генерации клавиатурных событий при срабатывании действий.
Практика
Я использовал тот же тренажёр сенсорного ввода ktouch , которым уже пользовался для обучения печати на клавиатуре почти два десятка лет назад. Для этой цели я создал специализированные уроки.

Практикуем аналоговый ввод на геймпаде в ktouch
Наблюдения
- Хотя процесс Python, в котором запущена эта система ввода, обычно потреблял не больше 10% ресурсов процессора, если бы он должен был постоянно выполняться в фоновом режиме, то я бы реализовал его заново и оптимизировал на языке более низкого уровня, чтобы процессор мог заниматься более затратными задачаи.
- После покупки геймпада DualShock4 я понял, то довольно точно могу выполнять диагональный ввод. Интеграция диагонального ввода уменьшит количество более сложных вариантов ввода, а значит, увеличит скорость.
- После недели практики я могу печатать на геймпаде всего в два раза медленнее, чем на клавиатуре. Учитывая мою безумную скорость печати на клавиатуре, это совсем неплохо. Для дополнительной выгоды я использую оставшиеся варианты ввода, привязав их к специальным действиям, например, к горячим клавишам или операциям конкретных программ.
- Похоже, сильнее всего напрягают большие пальцы круговые движения. Вероятно, стоит заменить их более долгими, но более прямыми вариантами ввода.
- Напряжение больших пальцев снижается после практики. Однако в начале стоит практиковаться всего по несколько минут за раз.
Заключание
Всего за пару дней я создал эффективную систему ввода для геймпадов. Можно внести множество усовершенствований, однако эта проверка концепции демонстрирует, что эффективный ввод текста на геймпаде возможен. Код проекта выложен на github.
- Python
- Периферия
- Игры и игровые консоли