PhidgetInterfaceKitでLED点滅テスト

ちょっと前に友人と一緒に買ったPhidgetInterfaceKitが届いたので、ちょっといじってみた。とりあえず、LEDを点灯させてみたい!と思い、それを実装したところまでをメモしておきます。(電気的知識に疎いので、なんとなく動けばいい、というレベルでやっています。こうしたほうが良い、安全だ、等、アドバイスがあれば教えてくださいませ。)

準備

今回の環境は、PhidgetInterfaceKit 8/8/8 を、WindowsXP SP2 につなげ、開発は、VC++ 2005を使用します。
Phidgetのダウンロードページ から Phidget.msi をダウンロードしてインストール。
そのあと、USBをつなげてみて、認識すればOK。認識しなければ、一度アンインストールしたり再起動後、もう一度インストールすればOK。(でした。自分の場合・・。)

examples/InterfacekitTest

サンプルコードを元にするので、次にサンプルコードをダウンロードします。
Phidgetのダウンロードページ からExamplesというのをダウンロードして、展開し、適当なディレクトリに配置。
AllExamplesディレクトリ内にあるソリューションファイルAllExamples.slnをダブルクリックで立ち上げ、InterfacekitTestプロジェクトをビルドして動作確認。
入力、出力状態に変化があったとき、その値を1000フレだけ出力するコンソールプログラムが起動し、終了します。

LED接続

次に、出力のためにLEDをつなげます。LEDはPhidgetInterfaceKitについてきてたものを使います。
PhidgetInterfaceKit 8/8/8 の場合、PDFドキュメントによると、デジタルアウトの前に300Ωの抵抗が接続済みらしいので、そのままつなげても大丈夫だと判断して、大胆に直接差し込んで使用します。使用するポートは隣にG(グランド)に近くて使いやすい7番を使うことにします。2本足のLEDは長い足のほう(アノード)が + なので7番に刺し、短い足のほう(カソード)を G に刺します。マイナスドライバで軽くねじを締めて固定し、ハードは完了。


ザクッとね。

コード修正

ハードウェアは完了したので、次にソースの改良。
と言っても簡単。
InterfacekitTestプロジェクトの、InterfacekitTest.cpp の test_interfacekit関数内を以下のように書き換えます。

// Digital Output #7 につなげた LED を点滅させるテスト.
while( true ){
  SYSTEMTIME  aTime;
  GetLocalTime( &aTime );   // 現在時刻を取得.
  bool  aFlagLed = ((aTime.wSecond % 2) == 0);  // 偶数秒は点灯.
  CPhidgetInterfaceKit_setOutputState(IFK, 7, aFlagLed); // 7番.

  // スペースバーを押したら終了.
  if( GetAsyncKeyState(VK_SPACE) & 0x8000 ){
    break;
  }
}

// 後片付け(つけっぱなしで終了はかっこ悪い).
CPhidgetInterfaceKit_setOutputState(IFK, 7, false);

/*
  for (i = 0; i<1000; i++)
  {
    CPhidgetInterfaceKit_setOutputState(IFK, 0, true);
    //Sleep(500);
    CPhidgetInterfaceKit_setOutputState(IFK, 0, false);
    //Sleep(500);
  }
*/

結果

以上でとりあえずできましたー。

うーん、次はサーボモーターとか制御したくなるなぁ・・。