Close

Arduino HID joystick gamepad na míru!

Arduino HID joystick gamepad na míru!

Chybí vám tlačítka na gamepadu nebo nejdou použít či namapovat? S Arduinem to lze snadno vyřešit! Prostě si vyrobte svůj gamepad na míru. Postup je velmi jednoduchý.

V gamepadu použijeme Arduino desku s mikrokontrolérem ATmega32u4, která se dokáže tvářit jako HID zařízení, tedy myš nebo klávesnice. A v tom vlastně spočívá jednoduchost tohoto projektu. O použití Arduina jako myš nebo klávesnice jsme psali v tomto článku.

Zalovte v šuplíku a připravte si následující věcičky. Pokud lovíte marně, tak vás odkazy zavedou na osvědčené produkty na e-shopu HW Kitchen.

  1. Arduino MICRO nebo Arduino LEONARDO
  2. Joystick modul
  3. 2 x spínací tlačítko
  4. Propojovací drátky M/F
  5. Tělo gamepadu – vezměte co je po ruce

Zapojení gamepadu s Arduinem

Jednotlivé součásti zapojte podle tohoto schématu. K propojení využijte drátky s konektory M/F.

Zapojení gamepadu s Arduinem
Zapojení gamepadu s Arduinem

Po propojení uchyťte elektroniku na tělo gamepadu.

Knihovna pro joystick: stáhnout a nainstalovat

Otevřete Arduino IDE, zkompilujte a nahrajte program:

#include <Joystick.h>

Joystick_ Joystick;

void setup() {
  // Initialize Button Pins
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);
  pinMode(2, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  digitalWrite(2, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);

  // Initialize Joystick Library
  Joystick.begin();
}

// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 9;

// Last state of the button
int lastButtonState[4] = { 0, 0, 0, 0 };

void loop() {

  // Read pin values
  for (int index = 0; index < 4; index++) {
    int currentButtonState = !digitalRead(index + pinToButtonMap);
    if (currentButtonState != lastButtonState[index]) {
      Joystick.setButton(index, currentButtonState);
      lastButtonState[index] = currentButtonState;
    }
  }
  Joystick.setXAxis(analogRead(A0));
  Joystick.setYAxis(analogRead(A1));
  Joystick.setRxAxis(analogRead(A2));
  Joystick.setRyAxis(analogRead(A3));


  delay(50);
}

Celá specifikace knihovny je na GitHub. Knihovna obsahuje několik tutoriálů, podle kterých lze postupovat ve vlastním projektu. V ReadMe.md je pěkně popsáno, co vše můžeme vytvořit. Jsou zde pokryty téměř všechny typy herních zařízení (volanty, letecké kniply, pedály, klávesnice). Knihovna dokáže vytvořit až 4 zařízení na jednom Arduinu. To znamená, že na jednom USB portu jsou fyzicky 4 gamepady!

Poznámky ke stavbě

Při nahrávání programu se může někdy stát, že proběhne kompilace, ale Leonardo nechce začít nahrávat program. Řešením je počkat na konec kompilace a zmáčknout reset tlačítko na Leonardu. Pro gamepad je celkově lepší použít menší desku Arduino MICRO.

Video s celým postupem stavby gamepadu

Projekt pro HW Kitchen a Arduino.cz nabastlil Zbyněk Daněk. Díky!

Oldřich Horáček

Napsat komentář