今までWiiリモコンのセンサ値を用いたプログラムを解説してきました。 Wiiリモコンの用途によっては、Wiiリモコンのセンサの値をリアルタイムに処理するのではなく、一度ファイルに書き出してから解説を行う必要がある場合もあります。今回は、センサの値をファイルで出力するプログラムについて解説を行います。
今回はCSVファイルで加速度センサの値を書き出します。CSVファイルとはデータを","(カンマ)で区切って並べたファイル形式です。Excelなどの表計算ソフトで用いられている形式でExcelに読み込ませてグラフ表示などに用いることができます。
1.Wii CSV出力プログラム
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 System.IO; //IOの宣言 using WiimoteLib; //WimoteLibの宣言 namespace WiimoteLib_Sample { public partial class Form1 : Form { Wiimote wm = new Wiimote(); //Wiimoteの宣言 Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS"); //文字コードをShift_JISへ StreamWriter writer; //StreamWriterの宣言 public Form1() { InitializeComponent(); } //接続ボタンが押されたら private void button1_Click(object sender, EventArgs e) { //StreamWriterのオープン test.csvに出力 上書き 文字コードはShiftJIS this.writer = new StreamWriter("test.csv", false, sjisEnc); this.wm.Connect(); //Wiimoteの接続 this.wm.WiimoteChanged += wm_WiimoteChanged; //イベント関数の登録 this.wm.SetReportType(InputReport.IRExtensionAccel, true);//レポートタイプの設定 } //切断ボタンが押されたら private void button2_Click(object sender, EventArgs e) { this.wm.Disconnect(); //Wiimote切断 this.writer.Close(); //StreamWriterのクローズ } //Wiiリモコンの値が変化する度に呼ばれる void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args) { WiimoteState ws = args.WiimoteState; //WiimoteStateの値を取得 //StreamWriterに書き出し 各軸は","で区切る this.writer.WriteLine( ws.AccelState.Values.X + "," + ws.AccelState.Values.Y + "," + ws.AccelState.Values.Z ); } } }
実行
1.WiiRemoteを接続してください。
2.F5キーを押して実行してください。
3.接続ボタンをクリックしてください。
接続ボタンを押した瞬間から、ファイルに書き出されます。 ※もしエラーが発生する場合はWiiRemoteが正しく接続されているか確認してください。
4.Wiiリモコンを左右、上下、手前奥に振り回してください。
5.切断ボタンをクリックしてください。
切断ボタンを押されるとファイル出力が停止します。
6.プログラムを停止して、プログラムの実行ファイルが格納されている場所まで移動します。
~Documents\Visual Studio 2008\Projects\WiimoteLib_Sample\WiimoteLib_Sample\bin\Debug
7.test.csvというファイルが作成されているので、クリックしてExcelを起動します。
8.グラフ機能を使ってグラフを描写します。
解説
Wiiリモコンの加速度センサの値をCSVファイルとして出力します。
using System.IO; //IOの宣言
ファイルの出力をするのに必要です。
Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS"); //文字コードをShift_JISへ StreamWriter writer; //StreamWriterの宣言
出力するファイルの文字コードをShift_JISに設定します。そしてStremWriterを宣言します。
//StreamWriterのオープン test.csvに出力 上書き 文字コードはShiftJIS this.writer = new StreamWriter("test.csv", false, sjisEnc);
出力するファイル名と文字コードを設定します。
第二引数のfalseをtrueにするとファイルの最後に常に追加されていきます。
this.writer.Close(); //StreamWriterのクローズ
ファイルを閉じます
//StreamWriterに書き出し 各軸は","で区切る this.writer.WriteLine( ws.AccelState.Values.X + "," + ws.AccelState.Values.Y + "," + ws.AccelState.Values.Z );
ファイルにデータを書き出します。加速度センサのX軸,Y軸,Z軸の値を書きだしています。各軸データには区切り文字の","(カンマ)で区切ることによりCSVファイルとしています。
今回は、加速度センサの値を出力しましたがボタンの値や赤外線カメラの情報も出力することが可能です。

