KOSAKA LABORATORY->Tips

 このBlogの一部が書籍になりました。
書籍:「WiiRemoteプログラミング」
著者:白井暁彦・小坂崇之・木村秀敬・くるくる研究室
表紙:タナカユカリ
発売:2009年7月25日 好評発売中
詳細:こちらから

内容:WiiRemoteを利用したインタラクティブ技術のプログラミング学習書

 話題の家庭用ゲーム機「Wii」の特徴的なコントローラーである「WiiRemote」をPCで使うプログラミングが注目されている。高性能な加速度センサーや赤外線センサーを持ち、Bluetooth接続が可能で、プログラミング可能なデバイスを、個人レベルで自作したり入手したりすることはできなかった。WiiRemoteの登場とともにそれが安価で手軽に入手可能になり、多くの人々が興味を持っている。

 本書は、WiiRemoteの応用に興味があるプログラミング初学者向けに、WiiRemoteをPCから扱うためのプログラミングを解説する。ハードウェア寄りのゲームプログラミング入門書として、ステップバイステップでソースコードを解説する。具体的なサンプルを開発しながら、インタラクション技術を独習できる。言語はC/C++、C#およびActionScript 3、Processingなどをサポート。

Wiiリモコン バイブレータのONとOFFプログラム

ここからは、実際にWiimoteLibを用いてプログラミングを行っていきます。
ここでは、FormボタンによってWiiRemoteのバイブレーターのONとOFFを行います。


1.接続、切断ボタンの追加

1.フォームにボタン2つ張り付けてください。

2.貼り付けたら、「button1」のプロパティのTextを「接続」に、「button2」のプロパティのTextを「切断」に設定する。


2.接続、切断ボタンイベントの追加
1.接続をボタンをダブルクリックし、以下のプログラムを追加する。
        //接続ボタンが押されたら
        private void button1_Click(object sender, EventArgs e) {
           this.wm.Connect();                                        //Wiimoteの接続
           this.wm.WiimoteChanged += wm_WiimoteChanged;              //イベント関数の登録
           this.wm.SetReportType(InputReport.IRExtensionAccel, true);//レポートタイプの設定
        }
2.切断をボタンをダブルクリックし、以下のプログラムを追加する。
        //切断ボタンが押されたら
        private void button2_Click(object sender, EventArgs e) {
           this.wm.Disconnect();                                     //Wiimote切断
        }
2.ボタンの作成
1.フォームにボタンを2つ貼り付けてください。


2.貼り付けたら「button3」のプロパティのTextを「ON」に、「button4」のプロパティのTextを「OFF」に、設定する。


3.ONをダブルクリックし、下記のように追加する
  private void button1_Click(object sender, EventArgs e) {
   wm.SetRumble(true);  //バイブーションON
  }

4.OFFをダブルクリックし、下記のように追加する
  private void button1_Click(object sender, EventArgs e) {
   wm.SetRumble(false);  //バイブーションOFF
  }
以上で終了です。これだけのプログラムでWiiRemoteのバイブレーター制御が可能になります。
Form1.csのソース
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WiimoteLib;    //WimoteLib

namespace Wii {
    public partial class Form1 : Form {

        Wiimote wm = new Wiimote();                               //Wiimoteの宣言

        public Form1() {
            InitializeComponent();

            //他スレッドからのコントロール呼び出し許可
            Control.CheckForIllegalCrossThreadCalls = false;

            InitializeComponent();
                    
        }
        
        //接続ボタンが押されたら
        private void button1_Click(object sender, EventArgs e) {
            this.wm.Connect();                                        //Wiimoteの接続
        }
        //切断ボタンが押されたら
        private void button2_Click(object sender, EventArgs e) {
            this.wm.Disconnect();                                     //Wiimote切断
        }
    }
}

実行
1.WiiRemoteを接続してください。


2.F5キーを押して実行してください。
 実行すると下図のようなアプリケーションが起動します。


3.接続ボタンを押してください。
 ※もし下図のようなエラーが発生する場合はWiiRemoteが正しく接続されているか確認してください。


4.ONボタンをクリックすると、バイブレーターがONになりWiiRemoteが振動します。

5.OFFボタンをクリックすると、バイブレーターがOFFNになりWiiRemoteの振動が止まります。
解説
 非常に簡単にWiiRemoteのバイブレーター制御プログラムが作れたと思います。このようにWiimoteLibには簡単にWiiRemoteが制御できるような関数がたくさん揃っています。
 Connect()関数でWiiRemoteとの接続を行います。このときWiiRemoteが正しく接続、認識されていなかった場合、例外(Exception)が発生します。今回は例外処理を行っていません。必要に応じて例外処理を追加してください。
 SetRumble()関数でWiiRemoteのバイブレーターを制御します。()の引数にtrueを入れると、バイブレーターが振動します。falseを入れるとバイブレーターが停止します。PWM制御(パルス幅変調:Pulse With Modulation)を用いることによってバイブレーターに強弱を付けることができます。簡単に説明すると高速にONとOFFを繰り返すことによってバイブレーターに強弱をつける制御方法です。ここではあえて説明しませんが、余力のある人はチャレンジしてみてください。

using WiimoteLib;
C#でWiimoteLibを使うための宣言を行う。
WiimoteLibを用いるためには必ず宣言する必要がある。

Wiimote wm = new Wiimote();
Wiimoteクラス wmを宣言し初期化を行う。
Wiimoteを用いるためには必ず宣言する必要がある。

wm.Connect();
WiiRemotoに接続をおこなう。
WiiRemoteが正しく接続していないとエラーになる。

wm.SetRumble(true);
WiiRemotoの バイブレーターを振動させる。

wm.SetRumble(false);
WiiRemotoの バイブレーターの振動をストップする。