“Phidgets”で簡単ハードウェア開発 〜 Imagine Cup 組み込み開発部門に向けて 〜:Windows Embedded CE開発入門(3/3 ページ)
Imagine Cup世界大会出場経験者が教える組み込み入門。Windows Embedded CEにPhidgetsを導入し、サンプルアプリを開発!
それでは、いよいよプログラミングです。といっても、とても簡単なので初心者の方も安心してください。
まず、usingステートメントに以下の2行を追加してください。
using Phidgets; using Phidgets.Events;
次に、使用するPhidgetsのオブジェクトを宣言します。今回は、PhidgetInterfacceKitを使用していますので、InterfaceKitオブジェクトを宣言します。
private InterfaceKit ifKit;
さらに、メインフォームのLoadイベントを追加して、以下の処理を加えてください。ここで、Phidgetsとの通信を開始します。
ifKit = new InterfaceKit(); ifKit.open(); ifKit.waitForAttachment(3000);
初期化や設定はこれで完了です。後は、センサの値を読みにいくだけです。
センサの値が変化したら呼ばれるようなメソッドを作成して、イベントドリブン型にすることもできます。しかし、メソッドは別スレッドで呼ばれるため、テキストボックスなどのコントロールが操作できません。いろいろと工夫すれば可能ですが、今回はシンプルに、一定時間置きにセンサの値を読んで表示するようなプログラムにします。
これも非常に簡単です。100ms程度のインターバルのタイマを用意して、タイマのTickイベント内に次の処理を追加します。ifKit.sensorsは、配列になっていて、添字がA/Dコンバータのポート番号です。
textBox1.Text = ifKit.sensors[0].Value.ToString();
最後に、メインフォームが閉じられたときの処理を追加します。メインフォームのClosingイベントを追加して、以下の処理を加えてください。
Application.DoEvents(); ifKit.close();
ここまで記述したプログラムは以下のとおりです。
using System; using System.Linq; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Phidgets; using Phidgets.Events; namespace PhidgetTestCE { public partial class Form1 : Form { private InterfaceKit ifKit; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { ifKit = new InterfaceKit(); ifKit.open(); ifKit.waitForAttachment(3000); } private void Form1_Closing(object sender, CancelEventArgs e) { Application.DoEvents(); ifKit.close(); } private void timer1_Tick(object sender, EventArgs e) { textBox1.Text = ifKit.sensors[0].Value.ToString(); } } }
以上、プログラミングはこれだけです。とても簡単ですね。
最後にビルドして、PhidgetsInterfaceKitを接続してから、ターゲットプラットフォーム上で起動してみてください。なお、起動の方法としては、以下の2つがあります。
- (1)Visual Studioとターゲットプラットフォームを通信して起動
- (2)EXEファイルとDLLをUSBメモリに入れて、ターゲットプラットフォームで起動
(1)の方法は、事前にいくつかの作業が必要ですが、デバッグは楽です。詳細な手順については割愛しますが、興味のある方はほかの記事や書籍(例えば、大川 善邦氏の「はじめてのWindows Embedded CE 6」)などを参照してみてください。(2)の方法は、デバッグ→実行を何度も繰り返す場合には手間が掛りますが簡単な方法です。初心者の方は、ひとまずこちらの方法で試していただくといいでしょう。
ちなみに、わたしが実際に実験した環境が図7です。右側の距離センサに手をかざすと、テキストボックス内の数値が変化します(図8)。距離が正しく電圧に変換されて、それをA/Dコンバータで読み込んだ結果が出力されています。
番外:デジタルI/O
デジタルI/Oはもっと簡単です。番外として、ここではデジタルI/Oのイメージをつかんでいただくために簡単なプログラムの記述例を紹介します。
以下のように記述することで、LEDを光らせたり、スイッチの状態を取得したりできます。
ifKit.outputs[0] = true; // 0番のOutputに“1”(5V)を出力 ifKit.outputs[0] = false; // 0番のOutputに“0”(0V)を出力 if (ifKit.inputs[0] == true) // 0番のInputが“1”(5V)だったら if (ifKit.inputs[0] == false) // 0番のInputが“0”(0V)だったら
Phidgetsを使うと、デバイスドライバの詳しい知識などなくても、ハードウェアの情報を簡単にソフトウェアに取り込むことができます。使いたいと思ったセンサがアナログ電圧出力ならばしめたもの。Phidgetsにつないで、前述のとおりにプログラムを記述すれば、すぐにセンサの値を読み込むことができます。
ハードウェアに苦手意識を持っていた皆さん、ハードウェアが身近に、そして簡単に思えてきませんか? 少しでもそう思えたら、本特集を参考にアイデアあふれる組み込みデバイスを開発してみませんか。また、筆者のようにImagine Cup 組み込み開発部門にチャレンジすることもモチベーションアップの1つの手段だと思います!
Copyright © ITmedia, Inc. All Rights Reserved.