Classiclll's Blog

an old boy

WiiRimokon for Proce55ing : Class Design part 1

イメージ 1

WiiRimokon for Proce55ing : Class Design part 1

承前 Wiiリモコン

ご存知、Wiiリモコンを使うと、
 体を使ってテニスが出来る。
 体を使ってシューティングが出来る。
 体を使って・・・が出来る。
ゲームアイテムの優れもの。

工学的には
 三軸加速度センサー(上下、前後、左右方向に加わった加速度を計測)
 4個のLEDランプ
 IR(赤外線)センサー(1024x768の二値センサーアレイ)
 バイブレータ
 十字キー
 7個のボタン(1,2,A,B,+,-,Home)
 1個のパワースイッチ(Power)
 バイブレータ
 Bluethoothデバイス
を単三アルカリ二本で駆動する独立装置
Bluethoothを装着したパソコンの入出力装置としてみると、非常~に興味深い。
でもって、P5で扱えると、あんなことや、こんなことが、いろいろ出来てしまう。
なので、Wiiリモコンを扱えるP5のクラスライブラリーを妄想してみた。

クラスライブラリー WRJ4P5(WiiRemoteJ For Proce55ing)


まずは、あなたのスケッチ(PApplet)
class PApplet 必要なら下記メソッドは各自用意すべし
【event handling methods】
 void buttonPressed(RimokonEvent ev, int rid) Wiiリモコンのボタンが押されたときに呼ばれる。
 void nunchakuPressed(NunchukEvent ev, int rid) ヌンチャクのボタン/スティックが押されたときに呼ばれる。
 void kurakonPressed(KurakonEvent ev, int rid) クラコンのボタン/スティックが押されたときに呼ばれる。
 void disconnected(int rid) (いずれかの)Wiiリモコンが切り離されたときに呼ばれる。
 void exDisconnected(int rid) (いずれかの)Wiiリモコンからヌンチャク/クラコンが切り離されたときに呼ばれる。

次はWii本体、リモコンを最大7台まで繋げられ、各リモコンにはヌンチャクかクラコンを繋げられる。
class WRJ4P5
 WRJ4P5() コンストラクタ。一つだけWiiリモコンを繋げる。
 WRJ4P5(int count) コンストラクタ。指定された数のWiiリモコンを繋げる。

 int rCount 繋がっているWiiリモコンの数

 WiiRimokon rimokon 最初に繋がったWiiリモコン
 WiiRimokon rimokon(int rid) (最大7台の)繋がっているリモコン
 WiiNunchaku nunchaku 最初に繋がったWiiリモコンに繋がっているヌンチャク(無ければnul)
 WiiNunchaku nunchaku(int rid) 各Wiiリモコンに繋がっているヌンチャク(無ければnul)
 WiiKurakon kurakon 最初に繋がったWiiリモコンに繋がっているクラコン(無ければnul)
 WiiKurakon kurakon(int rid) 各Wiiリモコンに繋がっているクラコン(無ければnul)
興味の対象、Wiiリモコン
class WiiRimokon

【propaties】
 Loc sencedVal センサー計測値(-256~+256)
 Loc acceleration 加速度(m/sec/sec)
 Loc velocity 速度(m/sec)
 Loc position 位置(m)

 Loc angAcc 角加速度(rad/sec/sec)-ヌンチャク必須
 Loc angVel 角速度(rad/sec)-ヌンチャク必須
 Loc direction 方向(rad)ーヌンチャク必須

 Loc cursor カーソル位置(%)

【methods】
 <connection/communication>
 void disconnect() Wiiリモコンとの接続を切る
 boolean isConnected() Wiiリモコンとの接続を確かめる
 boolean isExtensionConnected() Wiiリモコンにヌンチャクやクラコンが繋がっているかを確かめる。

 void requestStatus() Wiiリモコンの(バッテリやLED等の)最新状態を取得し始める。
 boolean isReadingData() Wiiリモコンの状態を取得中かどうかを確かめる。

 <Battery>
 float getBatteryLevel() バッテリー残量を得る(0~1)

 <LED Lights>
 boolean[] getLEDLights() (4本の)LEDライトの状態を得る。
 boolean isLEDIlluminated(int light) 指定されたLEDライトの点灯を確かめる。
 void setLEDIlluminated(int light, boolean illuminated) 指定されたLEDライトをOn/Offする。
 void setLEDLights(boolean[] lightStatus) (4本)全てのLEDライトをOn/Offする。

 <Speaker>
 void bufferADPCMSound(AudioInputStream audioIn) 4-bit ADPCMサウンドを準備する。
 void bufferSound(AudioInputStream audioIn) signed 8-bit PCM でサウンドを準備する。
 float getSpeakerVolume() スピーカの音量(0~1)を確かめる。
 void setSpeakerVolume(float volume) スピーカの音量(0~1)をセットする。
 boolean isPlayingSound() サウンドを流している状態かを確かめる。
 void playPrebufferedSound() 準備したサウンドを流す。
 void playSound(AudioInputStream audioIn) AudioInputStreamサウンドを流す。
 void stopSound() サウンドを止める。

 <Vibrator>
 boolean isVibrating() 振動が続いているか確かめる。
 float getVibrationMagnitude(int magnitude) 振動の強さ(0~1)を確かめる。
 void setVibrationMagnitude(int magnitude) 振動の強さ(0~1)をセットする。
 void startVibrating() 現在の強さで振動を開始する。(止めるまで止まらない)
 void vibrateFor(long time) 現在の強さで指定時間のあいだ継続する振動を開始する。
 void stopVibrating() 振動を止める。


この項、継続




Processing については、
日本語サポートサイトからたどれるP5インフォメーション→言語が参考になる。
(解説してあるのは一昔前の版だから注意が必要だけど、loop()→draw()の読み替えだけで大抵OK)
・山本徹(thoru)さんがFunProce55ingで解説してくれている。(【簡潔】で【わかり易く】、【楽しい】解説)
例題集は習作集と区別するためにこちらに置いている。
・P5のスケッチからアプレットを作り、【ジオシティーズ】にアップする手順をまとめたので、参考に。