Найти в Дзене

Универсальный джойстик на ардуино

Универсальный джойстик на Arduino Pro Micro
Универсальный джойстик на Arduino Pro Micro
Обратная сторона платы
Обратная сторона платы

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

Я его изготовил для игры в ретро игрушки на различных эмуляторах ZX Spectrum, Dendy, PS1, PS2 и PSP, Sega и Java Mobille Game.

В качестве основы, взята плата Arduino Pro Micro с микроконтроллером Atmega32u4, которая позволяет эмулировать клавиатуру и мышь. По сути изготовленный джойстик представляет урезанную версию клавиатуры с заранее запрограммированными кнопками, подключающийся к компьютеру через кабель micro USB.

Схема Э3 джойстика
Схема Э3 джойстика

Выше представлена схема Э3 джойстика, которая состоит из 14 кнопок, каждая из которых подтянута через резисторы к земле. Также в схеме подключен к плате через резистор светодиод (на плате не запаян). Плата разведена на стеклотекстолите, резисторы использовались SMD, для уменьшения габаритов джойстика, а также тактовые кнопки.

Разводка печатной платы джойстика (не отзеркаленная)
Разводка печатной платы джойстика (не отзеркаленная)

Ниже представлен код прошивки, написанный в среде разработки Arduino IDE:

#include <Keyboard.h>

void setup() {

Keyboard.begin();

Serial.begin(9600);

pinMode(6, INPUT);

pinMode(9, INPUT);

pinMode(5, INPUT);

pinMode(8, INPUT);

pinMode(7, INPUT);

pinMode(2, INPUT);

pinMode(3, INPUT);

pinMode(15, INPUT);

pinMode(10, INPUT);

pinMode(18, INPUT);

pinMode(16, INPUT);

pinMode(14, INPUT);

pinMode(21, INPUT);

pinMode(20, INPUT);

delay(500);

}

void loop() {

if(digitalRead(6) == HIGH){

Keyboard.press('8');

}

if(digitalRead(6) == LOW){

Keyboard.release('8');

}

if(digitalRead(9) == HIGH){

Keyboard.press('2');

}

if(digitalRead(9) == LOW){

Keyboard.release('2');

}

if(digitalRead(5) == HIGH){

Keyboard.press('4');

}

if(digitalRead(5) == LOW){

Keyboard.release('4');

}

if(digitalRead(8) == HIGH){

Keyboard.press('6');

}

if(digitalRead(8) == LOW){

Keyboard.release('6');

}

if(digitalRead(7) == HIGH){

Keyboard.press('5');

}

if(digitalRead(7) == LOW){

Keyboard.release('5');

}

if(digitalRead(2) == HIGH){

Keyboard.press(KEY_F1);

}

if(digitalRead(2) == LOW){

Keyboard.release(KEY_F1);

}

if(digitalRead(3) == HIGH){

Keyboard.press('`');

}

if(digitalRead(3) == LOW){

Keyboard.release('`');

}

if(digitalRead(15) == HIGH){

Keyboard.press('9');

}

if(digitalRead(15) == LOW){

Keyboard.release('9');

}

if(digitalRead(10) == HIGH){

Keyboard.press('1');

}

if(digitalRead(10) == LOW){

Keyboard.release('1');

}

if(digitalRead(18) == HIGH){

Keyboard.press('7');

}

if(digitalRead(18) == LOW){

Keyboard.release('7');

}

if(digitalRead(16) == HIGH){

Keyboard.press('3');

}

if(digitalRead(16) == LOW){

Keyboard.release('3');

}

if(digitalRead(14) == HIGH){

Keyboard.press('0');

}

if(digitalRead(14) == LOW){

Keyboard.release('0');

}

if(digitalRead(21) == HIGH){

Keyboard.press(KEY_F2);

}

if(digitalRead(21) == LOW){

Keyboard.release(KEY_F2);

}

if(digitalRead(20) == HIGH){

Keyboard.press('/');

}

if(digitalRead(20) == LOW){

Keyboard.release('/');

}

}

Данный программный код позволяет эмулировать плате ардуино клавиатуру. Функция Keyboard.press('символ'); эмулирует нажатие кнопки клавиатуры, где в скобках указывается обозначение кнопки (при желании можно поменять). Функция Keyboard.release('символ'); эмулирует, наоборот, разжатие соответствующей кнопки. В начале программного кода указывается библиотека для эмуляции клавиатуры Keyboard.h, а в setup указывается процедура из библиотеки для запуска процесса эмуляции Keyboard.begin();. В остальном, стандартный программный код для ардуино, который напишет любой школьник.

В итоге, получился хороший универсальный джойстик для ретро гейминга, которым мне приятно пользоваться. Корпус делать для него не буду (нравится мне этот колхозный стиль), и так удобно.

PS, плата дорабатывалась, на фото платы с обратной стороны и в программном коде указаны выводы ардуино, на которые переподключены некоторые кнопки.

До новых встреч!