【FF14】 リアルで侍をプレイする刀コントローラを作る(キー入力デバイス編)

  • このエントリーをはてなブックマークに追加
ガジェット, 小細工

(0) 準備編
(1) キー入力デバイス編 << here!
(2) 無線デバイス制御編その1 HTTPClient

今回はArduinoを使ってキーボード操作の代わりとなる入力デバイスを作ります。入力デバイスはPS4でも使えるようにUSB HIDキーボードとしての機能を持たせます。

こちらのサイト(Arduino Uno R3 で作るESC専用USBキーボード)を参考にArduino Unoをキーボード化しました。
上記サイトでは、Arduinoのファームウェアをキーボードのものに上書きしてESCキー専用スイッチを作るといった内容の説明がされています。

こちらを参考にして、Arduinoと接続されたスイッチが押されたときにESCキーに対応したキーコードをUSBプロトコルに従ってシリアルで出力する機能を実装します。

作業の詳細は上記リンクを照覧いただいて、ATmega328pチップにプログラムを書き込んでからDFUモードで16u2チップにKeyboardHEXを上書きすると、Arduinoは無事にHIDキーボードデバイスとして認識されました。

入力キーを制御するためのテストをしたいので、スイッチを押すと[A]キーが押されるプログラムを作りました。それ以外は上記リンクのサイトのプログラムをそのまま使用しています。
キーコードはUSB HID仕様表の10 Keyboard/Keypad Page (0x07)に定義されているため、こちらを参照します。
今回使用する[A]キーのIDは0x04であることが分かります。

#define LED_PIN 13 
#define PIN_A 2 
#define KEY_RESET 0x00 
#define KEY_A 0x04 
uint8_t keyData[8] = { 0, 0, 0, 0, 0, 0, 0 }; 
void handler(int pin, uint8_t keycode) { 
if (digitalRead(pin) == 1) { 
digitalWrite(LED_PIN, HIGH); 
keyData[2] = keycode; 
Serial.write(keyData, 8); 
// send 
keypress keyData[2] = KEY_RESET; 
Serial.write(keyData, 8); 
// release key 
while( digitalRead(pin) == 1) { delay(100); } 
digitalWrite(LED_PIN, LOW); 
} } 

void setup() {
 pinMode(LED_PIN, OUTPUT);
 pinMode(PIN_A, INPUT);
 Serial.begin(9600);
 delay(2000);
}
void loop() {
 handler(PIN_A, KEY_A); 
}

実際にPS4上で動作させてみます。

PS4で正常に入力を受け付けてくれるか若干不安でしたが、問題なく動作しました。
ただPS4に同時に接続できるUSBデバイスは2つまでのようで、キーボードとマウスを接続したうえでArduinoを接続するとマウスかキーボードのどちらかの接続が解除されるようです。むー、ちょっと不便。

これでゲームをプレイするためのキー入力デバイスは完成です。
続いて刀からの無線信号の指令をキー入力に変換する仕組みを作ります。
今回は無線信号の受信にRaspberry Pi 3(以下ラズパイ)を使用するので、ラズパイのGPIOピンの出力をそのままArduinoの入力ピンで受け付ける形にします。

使用するピンの数は判別するスキルの数によって増減するので、ここで侍のスキルを確認しましょう。
メディアツアー情報から得られた侍のウェポンスキル(WS)は11種類です(6月2日現在 ファミ通.comより)。
ここで、アビリティについてはコントローラの入力対象外にしようと思います。動きが複雑となり、刀の動きでの判定が難しいためです。
11種類の動作は2^4パターンで表現できるので、4本のピンを使用してラズパイとArduinoを接続します。

次回は刀とラズパイの通信をしたいと思います。
>> 無線デバイス制御編その1 HTTPClient


記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

Copyright (C) 2010 – 2017 SQUARE ENIX CO., LTD. All Rights Reserved.

  • このエントリーをはてなブックマークに追加

コメントを残す


CAPTCHA