ユーザーブロマガは2021年10月7日(予定)をもちましてサービスを終了します

INFINITAS用 変換器作ったよ~
閉じる
閉じる

INFINITAS用 変換器作ったよ~

2017-04-28 18:03
  • 1
みなたま~こんばんちわ~

3月の月末からプレイし始めたbeatmania IIDXのPC版「beatmania IIDX INFINTIAS」ですが、私の放送をご覧の方はご存知の通り
「判定どこ?は?光らなさすぎやろ!ク○ゲーかよ!F@ck!””」
と楽しそうにビートを刻んでいましたが、この度そういった言動なく紳士的な放送ができる環境が整いました。
何をもったいぶってわかりにくく書いてるんだよって怒られそうなのでちゃんと書きます。

今回INFINITAS用にbeatmania IIDX専用コントローラをPCに接続する変換器を自作したお話でございます。

専コン↓




結果から言うと、
めちゃくちゃ光るようになったよ。

今まではエレコムより販売されいてる
JC-PS101Uシリーズというものの白色を使用してプレイしていたのですが、これだとどうもあまりいいスコアが出ないのです。
原因を調べてみると、そもそもINFINTIASはキーボードと専用コントローラプレミアムモデル(現在は発売していません、以下プレコン)が動作の対象でして、家庭用コントローラや海外製コントローラなどは非対応となっているわけです。それをパッドのボタンをキーボードに割り当てることで遊べるのですが、キーボードとプレコンより変換などをする工程がある分遅延を発生させるということです。この場合の遅延とは入力の遅延のことなので発音や映像処理の遅延についてはまた別の話になります。

そこでキーボードとして認識させる変換器を作っちゃえばいいじゃないかという旨の記事をとあるブログで発見しました。↓
http://darekasan.net/wordpress/archives/429#comment-9226
この記事を見てやってみる価値はあるかもしれないと感じた私は、不器用ながら電子工作に挑戦しなんとかハードウェアを完成させることができました。
それがこちら↓


配線汚ねぇ…
とりあえず動くかどうかもわからなかったので空中配線してみたのですが、動作は問題なかったのでボードに配線し直すかもしれません。お次はソフトウェアなんですが、これも必要なソフトも書いてありほとんど何も考えずにできちゃいました。

作り方は上のブログに書いてありますし、プログラムの知識の全くない私でもできるぐらい丁寧に作り方が書かれていますので判定が何処か別の大陸へ旅立った方はぜひおすすめですよ。



最後にかんたんに作成の手順をば

1.PS2コントローラを差し込むための端子が必要なので用意する
 私の場合は新品のエレコムのコンバータを分解してそれを使いました。上の完成写真でいう赤い線がいっぱいついてる左下の透明な部分のことです。

2.各電子部品を用意する
抵抗器(1kΩ×2個)とリード線、ヘッダピン(10ピンひとつで足りました)、
Arduino Leonardo(互換品でも問題なかったです。)私が今回使用したものは

Arduino互換 Leonardo R3 マイクロコントローラーボード【HP-ABR-LEOR3】



3.これらをはんだごてを使って工作する
ブログに書かれているように接続します。

4.Arduino IDEというフリーソフトをDLしパソコンにインストールする。
ライブラリと呼ばれるもの2種類ダウンロードしてきてArduino IDE内のLibrariesというフォルダの中に解凍したフォルダを入れておきます。

5.PCと作った変換機をUSBケーブルで繋いでArduino IDEでプログラムを書き込む
これはブログにあるソースコードを貼るだけです。
ちなみにソースを打ち込んでそのまま「マイコンボードへ書き込む」をしてもコンパイルエラーがでます。(私がやったミスです)
上のメニューのツールでボードとシリアルポートを正しく選択してください。

以上です。

わかりにくいことがあれば放送で直接聞いてくれればわかることならお答えします。

追記(2017/6/29)

 ・この記事一番下のニコニコ市場の欄に今回使ったマイコンボードをリンク付けしてますのでそちらも併せてご参照ください。m(_ _)m

 ・専コンのスタートボタンをEnterキー、セレクトボタンをBACKSPACEキーにアサインすることでプレイ画面を重視したキー配置を目指しました。
以下Arduinoのソースコードです。ご参照ください。
#include "HID-Project.h"
#include <Psx.h>

#define dataPin 7
#define cmndPin 6
#define attPin 5
#define clockPin 4

#define SLCT KEY_BACKSPACE
#define STRT KEY_RETURN

#define SCR1 KEY_LEFT_CTRL
#define SCR2 KEY_LEFT_SHIFT

#define KEY1 'z'
#define KEY2 's'
#define KEY3 'x'
#define KEY4 'd'
#define KEY5 'c'
#define KEY6 'f'
#define KEY7 'v'

Psx Psx;
unsigned int data;

void setup()
{
NKROKeyboard.begin();
Psx.setupPins(dataPin, cmndPin, attPin, clockPin, 1);
}

void loop()
{
data = Psx.read();
if (data & psxSlct)NKROKeyboard.add(SLCT); else NKROKeyboard.remove(SLCT);
if (data & psxStrt)NKROKeyboard.add(STRT); else NKROKeyboard.remove(STRT);
if (data & psxDown)NKROKeyboard.add(SCR1); else NKROKeyboard.remove(SCR1);
if (data & psxUp)NKROKeyboard.add(SCR2); else NKROKeyboard.remove(SCR2);
if (data & psxSqu)NKROKeyboard.add(KEY1); else NKROKeyboard.remove(KEY1);
if (data & psxL1)NKROKeyboard.add(KEY2); else NKROKeyboard.remove(KEY2);
if (data & psxX)NKROKeyboard.add(KEY3); else NKROKeyboard.remove(KEY3);
if (data & psxR1)NKROKeyboard.add(KEY4); else NKROKeyboard.remove(KEY4);
if (data & psxO)NKROKeyboard.add(KEY5); else NKROKeyboard.remove(KEY5);
if (data & psxL2)NKROKeyboard.add(KEY6); else NKROKeyboard.remove(KEY6);
if (data & psxLeft)NKROKeyboard.add(KEY7); else NKROKeyboard.remove(KEY7);

NKROKeyboard.send();
}




広告
×
https://www.mercari.com/jp/items/m73948038631/
これと似たような製品を買ったことがあったのですが原理はこれと同じだと思って質問してみます。接続しても認識だけして動作しないのに何が問題でしょうか。 ソースコードが 間違っているんでしょうか。
6ヶ月前
コメントを書く
コメントをするには、
ログインして下さい。