2017/6/4
mameで使えるコントローラです。

4軸ジョイスティック2系統
ボタンスイッチ3個+2個(コイン、スタート)
USBキーボードをエミュレートして、ボタンやジョイスティックの各操作を キーボードのボタンに置き換えてHOSTに送ります。
ジョイスティックが2系統あるのは、リブルラブル、クレイジークレイマー用です。
image

検索すると、I-PAC2というのが見つかりますが、ebay価格$38とそこそこの値段です。 押されたボタンに対応するキーコードをUSBでPCに送る仕組みのようです。 それだったら、もっと安くあがる方法があるはず、と再検索しました。

見つかったのはArduinoを使う方法。 USB対応ライブラリも揃っていて、簡単にUSBキーボードをエミュレートできるようです。 買ったのは、Arduino LEONARDO。28kByteのプログラム領域、16MHz。
実例があったので、いきなりポートへのスイッチ割付検討です。

検討図
image

ソースコード

#include void setup() { Keyboard.begin(); pinMode(1, INPUT_PULLUP); // CTRL pinMode(2, INPUT_PULLUP); // ALT pinMode(3, INPUT_PULLUP); // SPACE pinMode(4, INPUT_PULLUP); // pinMode(5, INPUT_PULLUP); // pinMode(6, INPUT_PULLUP); // 1 start pinMode(7, INPUT_PULLUP); // 5 coin pinMode(8, INPUT_PULLUP); // RIGHT pinMode(9, INPUT_PULLUP); // UP pinMode(10,INPUT_PULLUP); // LEFT pinMode(11,INPUT_PULLUP); // DOWN pinMode(A0, INPUT_PULLUP); // K Down pinMode(A1, INPUT_PULLUP); // J Left pinMode(A2, INPUT_PULLUP); // I Up pinMode(A3, INPUT_PULLUP); // L Right } void loop() { // Check the switches: int buttonState1 = digitalRead(1); // CTRL int buttonState2 = digitalRead(2); // ALT int buttonState3 = digitalRead(3); // SPACE int buttonState4 = digitalRead(4); // int buttonState5 = digitalRead(5); // int buttonState6 = digitalRead(6); // 1 start int buttonState7 = digitalRead(7); // 5 coin int buttonState8 = digitalRead(8); // RIGHT int buttonState9 = digitalRead(9); // UP int buttonState10= digitalRead(10); // LEFT int buttonState11= digitalRead(11); // DOWN int AState0 = digitalRead(A0); // K Down int AState1 = digitalRead(A1); // J Left int AState2 = digitalRead(A2); // I Up int AState3 = digitalRead(A3); // L Right //----------------------------------- // Arrow Left if (buttonState8 == LOW) { Keyboard.press(KEY_LEFT_ARROW); } else { Keyboard.release(KEY_LEFT_ARROW); } // Arrow Right if (buttonState10 == LOW) { Keyboard.press(KEY_RIGHT_ARROW); } else{ Keyboard.release(KEY_RIGHT_ARROW); } // Arrow Up if (buttonState11 == LOW) { Keyboard.press(KEY_UP_ARROW); } else{ Keyboard.release(KEY_UP_ARROW); } // Arrow Down if (buttonState9 == LOW) { Keyboard.press(KEY_DOWN_ARROW); } else{ Keyboard.release(KEY_DOWN_ARROW); } //----------------------------------- // Left Ctrl key if(buttonState1 == LOW) { Keyboard.press(KEY_LEFT_CTRL); } else{ Keyboard.release(KEY_LEFT_CTRL); } // Left ALT key if(buttonState2 == LOW) { Keyboard.press(KEY_LEFT_ALT); } else{ Keyboard.release(KEY_LEFT_ALT); } // Space key if(buttonState3 == LOW) { Keyboard.press(32); } else{ Keyboard.release(32); } //----------------------------------- // 1 key if(buttonState6 == LOW) { Keyboard.press(49); } else{ Keyboard.release(49); } // 5 key if(buttonState7 == LOW) { Keyboard.press(53); } else{ Keyboard.release(53); } //----------------------------------- // 'k' Down if (AState0 == LOW) { Keyboard.press(107); } else { Keyboard.release(107); } // 'j' Left if (AState1 == LOW) { Keyboard.press(106); } else{ Keyboard.release(106); } // 'i' Up if (AState2 == LOW) { Keyboard.press(105); } else{ Keyboard.release(105); } // 'l' Right if (AState3 == LOW) { Keyboard.press(108); } else{ Keyboard.release(108); } }


手近にあった木材の寸法に合わせて筐体を作りました。 スイッチは上から叩かれるので、近くに補強の板を配置しています。
構造図。
image

組みあがったところ。
image
image
image
image


戻る