IIDXコントローラーをULTIMATE MOBILEに対応させる手順

当記事は筆者が個人で制作販売をしている「beatmaniaIIDX用ハンドメイドコントローラー」及び「3Dプリンター製ミニIIDXコントローラー」をULTIMATE MOBILEに対応させる手順を説明しています
それ以外のコントローラーではできませんのでご了承ください
また、これらは有線接続可能なAndroid端末にのみ対応しています。Apple製品での無線接続には対応していません

手順1

製品にはArduinoを使用しているので、ファームウェアを書き換えるためのArduino IDEをインストールする

他、いくつかのプラグインもインストールする(zip形式)

IDEを起動したらメニューの「スケッチ→ライブラリをインクルード→.ZIP形式のライブラリをインストール」で上記HIDライブラリとEncoderライブラリを選択してインストールする

手順2

以下の記事の「デバイス情報を書き換える」の項で、対応のboards.txtの内容を書き換える

以下、Pro MicroをArduino Leonardとして扱うため、「Arduino Leonard」を書き換える
Arduino IDEを起動している状態でboards.txtを書き換えても反映されない。boards.txtを書き換えたらArduino IDEを再起動すること

手順3

USB接続でコントローラーとPCを繋ぎ、「ツール→ボード→Arduino AVR Boards→Arduino Leonard」を選択、同メニューのシリアルポート欄で基板が接続されていれば、下記のプログラムをインストールする
ハンドメイドコントローラーとミニIIDXコントローラーでインストールするプログラムが異なる

↓ハンドメイドコントローラー用、ミニIIDXコントローラー2P側用

#include <Arduino.h>
#include <HID-Project.h>
#include <Encoder.h>

// ピン番号 1~7鍵→E1~E4
int button[13] = {0, 2, 3, 4, 5, 6, 7, 8, 0, 9, 14, 15, A0};

Encoder Enc(10, 16);
int enc_now;
int enc_prev;
int x;

int i;

void setup() {
  for (i = 0; i < 13; i++) pinMode(button[i], INPUT_PULLUP);
  Gamepad.xAxis(0);
  Gamepad.begin();
}

void loop() {
  int i;
  //delay(1); delayは消してみる
  enc_now = Enc.read();
  if (enc_now != enc_prev) x += enc_now-enc_prev;
  if (x > 127) x-=255;
  else if (x < -128) x+=255;
  Gamepad.xAxis(x*256);
  enc_prev = enc_now;

  for (i = 0; i < 13; i++) {
    if (digitalRead(button[i]) == LOW) {
      Gamepad.press(i);
    }
    else {
      Gamepad.release(i);
    }
  }

  Gamepad.write();
}

↓ミニIIDXコントローラー1P側用

#include <Arduino.h>
#include <HID-Project.h>
#include <Encoder.h>

// ピン番号 1~7鍵→E1~E4
int button[8] = {0, 2, 3, 4, 5, 6, 7, 8};

Encoder Enc(10, 16);
int enc_now;
int enc_prev;
int x;

int i;

void setup() {
  for (i = 0; i < 8; i++) pinMode(button[i], INPUT_PULLUP);
  Gamepad.xAxis(0);
  Gamepad.begin();
}

void loop() {
  int i;
  //delay(1); delayは消してみる
  enc_now = Enc.read();
  if (enc_now != enc_prev) x += enc_now-enc_prev;
  if (x > 127) x-=255;
  else if (x < -128) x+=255;
  Gamepad.xAxis(x*256);
  enc_prev = enc_now;

  for (i = 0; i < 8; i++) {
    if (digitalRead(button[i]) == LOW) {
      Gamepad.press(8-i);
    }
    else {
      Gamepad.release(8-i);
    }
  }

  Gamepad.write();
}

手順4

ハンドメイドコントローラーの場合は、USB Type-A端子を端末の対応端子に変換するコネクタを使用して接続する
たとえばType-Cの端末ならダイソーに100円で売っている以下の商品が使用可能

ミニコントローラーの場合は、コントローラー側の端子がType-Cなので対応のケーブルを用意して接続する
たとえば、Type-Cの端末なら同じくダイソーに100円で売っている以下のケーブルが使用可能

手順5

ULTIMATE MOBILEをインストールして遊んでみましょう。プレイサイドに応じて皿のレーンを変えるオプションを忘れずに