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を再起動すること

追記

何人かインストールでつまづく人が居たため、さらに詳細を記載。
まず、board.txtをテキストエディタで開く。

C:\Users\username\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6

インストールしてあるフォルダやバージョンによってアドレスが違う場合がある。自身の環境で適切なファイルを探してください。

開いたら430行目あたりにある

leonardo.build.vid=0x2341
leonardo.build.pid=0x8037
leonardo.build.usb_product="Arduino Leonardo"

#leonardo.build.vid=0x2341
#leonardo.build.pid=0x8037
#leonardo.build.usb_product="Arduino Leonardo"

leonardo.build.vid=0x1ccf
leonardo.build.pid=0x1018
leonardo.build.usb_product="beatmania IIDX controller Entry Model"
leonardo.build.usb_manufacturer="Konami Amusement"

に置き換える。この時点でArduino IDEを開いていた場合は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をインストールして遊んでみましょう。プレイサイドに応じて皿のレーンを変えるオプションを忘れずに