Игровой контроллер для ПК на Android
Всем привет! В данной статье я хочу рассказать о том, как можно сделать из своего Adndroid смартфона игровой контроллер (в простонародье — джойстик) для обычного ПК, а именно руль.
Описание задачи
Поведение руля будет эмулироваться с помощью акселерометра. Для этого ведется непрерывное сканирование пространственных координат и эмпирическим путем подбираются границы для каждого направления движения. Исходя из этих данных в реальном времени генерируются сочетания игровых клавиш. Например: W — вперед, WA — вперед и влево и т. д.
Для доставки этих данных на ПК должен быть запущен сервер, который принимает входящие команды и эмулирует нажатия соответствующих клавиш. Сервер можно сделать однопоточным, чтобы подключался только один смартфон. Соединение будет осуществляться по Wi-Fi.
А теперь самое интересное…
Сервер
Сервер реализован на C++ под Windows. Основная его задача — непрерывно принимать входящие сообщения и нажимать клавиши. Ниже приведен основной и простой код для данной задачи:
- while ( true )
- std::cout
- try
- socket = server.Accept();
- > catch ( const char *error )
- std::cout
- exit( 0 );
- >
- bool keepAlive = true;
- int timeout = 10000 ;
- setsockopt( server.getSocket( ), SOL_SOCKET, SO_KEEPALIVE, ( char* )&keepAlive, size of( bool ));
- setsockopt( server.getSocket( ), SOL_SOCKET, SO_RCVTIMEO, ( char* )&timeout, size of( int ));
- std::cout
- while ( true )
- std: :string msg = socket->ReceiveLine();
- if ( msg.empty( ))
- break;
- processKeys( msg.c_str( ));
- >
- std::cout
- >
- void pressKeys( char key1, char key2 )
- // отжать предыдущие клавиши
- for ( std::map::iterator it = scanCodes.begin( ) ; it != scanCodes.end(); it++ )
- char curKey = it->first;
- if ( curKey != key1 && curKey != key2 )
- upKey( curKey );
- >
- downKey( key1 );
- downKey( key2 );
- >
- void downKey( char key )
- keybd_event( VkKeyScan(key ), scanCodes[key], 0 , 0 );
- >
- void upKey( char key )
- keybd_event( VkKeyScan(key ), scanCodes[key], KEYEVENTF_KEYUP, 0 );
- >
Клиент
Задача клиента — подключится к серверу и посылать комбинации клавиш для нажатия. Для этого используется акселерометр. Наша задача — получить пространственные координаты телефона. Это делается так:
- public class MainActivity extends Activity implements SensorEventListener
- @Override
- public void onCreate(Bundle savedInstanceState)
- // .
- sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
- accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
- //.
- >
- @Override
- public void onSensorChanged(SensorEvent event )
- if ( event .sensor.getType() == Sensor.TYPE_ACCELEROMETER)
- long curTime = System.currentTimeMillis();
- // считывание данных раз в 100 мс, иначе телефон загнется от сборщика мусора
- if (lastUpdate == — 1 || (curTime — lastUpdate) > 100 )
- lastUpdate = curTime;
- x = event .values[DATA_X];
- y = event .values[DATA_Y];
- z = event .values[DATA_Z];
- xLabel.setText(String.format( «X: %+2.5f» , x));
- yLabel.setText(String.format( «Y: %+2.5f» , y));
- zLabel.setText(String.format( «Z: %+2.5f» , z));
- try
- sendKeys(); // анализ координат для отправки клавиш на сервер
- > catch (Exception e)
- e.printStackTrace();
- >
- >
- >
- >
- >
Важный момент — считывать данные с акселерометра надо с определенным интервалом, иначе ваша программа моментально подвесится от непрерывных запросов к сенсору. Также при сворачивании надо отвязывать listener от акселерометра, чтобы ресурсы системы и батареи не тратились зря. Для этого в методах onResume и onPause делается следующее:
- @Override
- protected void onResume()
- super.onResume();
- sensorManager.registerListener( this , accelerometer, SENSOR_DELAY_NORMAL);
- >
- @Override
- protected void onPause()
- super.onPause();
- sensorManager.unregisterListener( this );
- >
Код для генерации клавиш очень прост. Все границы определялись экспериментальным путем.
- private String getKeys()
- String keys = «» ;
- if (z > 7 . 5 )
- keys += «W» ;
- else
- keys += «S» ;
- if (y < - 3 )
- keys += «A» ;
- else if (y > 3 )
- keys += «D» ;
- return keys;
- >
Как это все работает
Испытывал я это все на Need For Speed Most Wanted. По ощущениям, конечно, не как настоящий руль, но играть можно.К сожалению, видео снять не получилось — в доме одна камера, и то на испытуемом телефоне. В ближайшее время обязательно выложу. Вот как это выглядит на ПК и на смартфоне:


Заключение
Пока главный недостаток в сервере — это глобальное нажатие клавиш, не зависящее от приложения. В дальнейшем будет чем заняться. Еще одна проблема с которой я столкнулся — постоянный разрыв соединения. Не нашел лучшего решения, чем постоянный реконнект при обрыве связи.
Как сделать руль из телефона для пк
Если вы любите играть на компьютере, у вас уже, наверное, есть джойстик для игры или рулевое колесо для гонок. Некоторые энтузиасты даже подключили WiiMote к компьютеру и используют его для игр.
Мы расскажем вам о новом способе, который еще лучше и доступнее: использовать ваш телефон в качестве джойстика, рулевого колеса и, основанные на гироскопе, FPS навигацию/режим стрельбы.
Monect позволяет вам дистанционно управлять вашим компьютером и играть в игры, используя Android устройство через Wi-Fi или Bluetooth. С Monect ваше Android устройство становится джойстиком, рулевым колесом, работающим на акселерометре и даже устройством, позволяющим прицеливаться в 3D FPS шутере, работающем на гироскопе.
Monect превращает ваш телефон/планшет/фаблет в клавиатуру/мышь/джойстик все в одном. Android устройство может также выступать в качестве беспроводной мышки или клавиатуры, как и большинство других приложений подобного рода. Лучшей частью этого приложения является то, что оно может использоваться в качестве контроллера для различных типов игр, таких как гонки, FPS, RPG и другие. Приложение использует все датчики Android (акселерометр, G-сенсор, гироскоп и другие), чтобы обеспечить полноценную, без задержек игру. Например, FPS режим позволяет осуществлять датчик гироскоп, в процессе прицеливания, или в гоночном режиме используется G-сенсор для включения руля.


RaceMode — играйте в гонки на компьютере, такие как NFS и управляйте рулевым колесом с помощью телефона, использующим G-сенсор
Джойстик — имитация джойстика, так что вы сможете играть в приключенческие игры, такие как Street fighter, Prince of persia и т.д.
FPS mode — использование гироскопа для прицеливания, прямо как настоящее оружие в руках, превосходная поддержка для Call of Duty!
TouchPad — симулятор сенсорной панели на вашем телефоне с поддержкой жестов, как на трекпад от Apple
My Computer — изучайте компьютерные файлы на вашем телефоне
Keyboards — симулятор буквенной и цифровой клавиатуры, функциональных клавиш
Text transfer — наберите текст на телефоне и передайте его на компьютер с помощью одного нажатия
PPT mode — когда вы должны присутствовать на лекции или совещании, данный режим поможет вам осуществить это
Browser, Media Control — легко управляйте браузером и медиа-плеером
Простой руль для ПК своими руками

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



ВИДЕО
КОМПОНЕНТЫ
Каталоги ссылок на Алиэкспресс на этом сайте:
- Всё для пайки: паяльники, приспособления
- Платы Ардуино, модули и датчики
- Модули и датчики для умного дома
- Дешёвые инструменты
- Аккумуляторы, платы защиты, зарядники
- Мультиметры
- Блоки питания, преобразователи
Стараюсь оставлять ссылки только на проверенные крупные магазины, из которых заказываю сам. Также по первые ссылки ведут по возможности на минимальное количество магазинов, чтобы минимально платить за доставку. Если какие-то ссылки не работают, можно поискать аналогичную железку в каталоге Ардуино модулей . Также проект можно попробовать собрать из компонентов моего набора GyverKIT .
- Arduino Pro Micro aliexpress, aliexpress, искать
- Энкодер дешёвый
- https://ali.ski/Lc49I8
- https://ali.ski/AZ1xsJ
- https://ali.ski/dlihJb
- https://ali.ski/Yam6O
Использование телефона Android в качестве ПК GamePad или рулевого колеса
Некоторые компьютерные игры лучше всего подходят для геймпада, например файтинги и платформеры, а играть в гоночные игры с клавиатурой просто ужасно. Может быть, вы много путешествуете со своим игровым ноутбуком, а геймпад просто занимает дополнительное место в вашей сумке – не говоря уже о целом рулевом колесе.
В этой статье я собираюсь показать вам, как настроить свой телефон Android в качестве геймпада или руля для игр на ПК.
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Используйте устройство Android в качестве руля ПК
Большинство современных устройств Android имеют встроенные гироскопы и акселерометры, что в основном означает, что они точно обнаруживают наклон направления. Таким образом, использование телефона в качестве руля для гоночных игр вполне возможно, с минимальными настройками. Ваш телефон Android и ваш компьютер должны быть подключены к одной сети Wi-Fi или через Bluetooth.
Существует множество приложений для этого, и мы перечислим несколько, но для целей данного руководства мы будем использовать Touch Racer, который вы можете получить. Вот в Google Play. Touch Racer очень прост в настройке, к сожалению, он предлагает только кнопки ускорения и торможения, но другие приложения могут предлагать дополнительные кнопки для переключения, просмотра камеры и т. Д.

- После установки Touch Racer на телефон Android также необходимо загрузить клиент для ПК.
- Запустите Touch Racer на своем телефоне Android, а также откройте его на своем ПК. Если ваш телефон и ПК подключены к одной и той же сети Wi-Fi или подключены по Bluetooth, клиент ПК должен автоматически определить ваше устройство и изменить статус подключения на «подключен» без дополнительных действий.
- В приложении Touch Racer на телефоне перейдите в «Настройки». Различные настройки полностью на ваше усмотрение, но они в основном имеют дело с чувствительностью рулевого управления. Чувствительность рулевого управления не требует пояснений, в то время как чувствительность акселератора и тормоза указывает, сколько вам нужно провести пальцем по экрану вверх или вниз для достижения максимального ускорения / торможения.
- Одной настройкой, которую вы можете изменить, является датчик рулевого управления – измените его с «Просто акселерометр» на «Акселерометр + гироскоп». Приложение утверждает, что это дает более точное управление за счет задержки, но я не заметил никакой задержки.
- После того, как вы настроили приложение, просто нажмите «Начать игру», а затем запустите гоночные игры по вашему выбору на вашем ПК. В опциях игры вам может потребоваться настроить элементы управления на «рулевом колесе».
Кроме того, если вы заметили, что ваш автомобиль поворачивается без наклона телефона, проверьте, есть ли в вашей игре опция «Перекалибровать рулевое колесо», и нажмите ее, удерживая телефон в идеальном горизонтальном положении, как если бы вы держали фактический руль в мертвой точке.
Используйте устройство Android как геймпад для ПК
Существует множество различных приложений для управления устройством на вашем Android-устройстве, в том числе в качестве геймпада, но мы хотим иметь приложение с настраиваемой раскладкой кнопок, эмуляцией большого пальца и хорошим временем отклика.
- Для этого мы будем использовать DroidJoy, поскольку он поддерживает как XInput, так и DInput, но есть и другие подобные приложения, если вы просматриваете Play Store.
- Установите приложение DroidJoy на свое устройство, а также DroidJoy настольный клиент,
- Запустите настольный клиент на своем ПК и убедитесь, что ваше Android-устройство и ПК подключены к одной и той же сети Wi-Fi или используют соединение Bluetooth.
- Запустите приложение DroidJoy на вашем Android-устройстве и нажмите «Поисковый сервер» в окне «Подключиться». Затем просто подключитесь к клиенту ПК, и все готово.
- В меню «Настройки» приложения Android вы можете настроить макет кнопки по своему вкусу или выбрать предварительно настроенный макет в раскрывающемся меню.
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)