イメージ 1

Visual C++2008Expressで作製したvbausbio.dllを用いたUSBIOインターフェースのコントロールプログラムでのタイマー機能とニューメリックコントロールを使ったプログラムの追加を行いました。プログラムの制御ではなくコントロールの使い方になります。私のVC++のWinndowsプログラムの言わば学習ステップです。
(1)タイマーコントロールをフォーム上に貼り付けます。
(2)ニューメリックコントロールをフォームに配置します。
(3)コマンドボタンを2つフォームに貼り付けます。(タイマーのスタートとストップ用)

【以下プログラムコード】
//グローバル変数の宣言を#programa onceの後に書きます。
int flagA;
int kankaku;


(省略)
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {
//出力ポート1に0を出力
if (flagA == 1) {
  uio_out(1,0,0);
  flagA=0 ;
}
else{
  uio_out(1,15,0);
  flagA=1;
}
}
private: System::Void button9_Click(System::Object^ sender, System::EventArgs^ e) {
//int kankaku ;
flagA=0;
timer1->Interval=kankaku;

      timer1->Start();
}
private: System::Void button10_Click(System::Object^ sender, System::EventArgs^ e) {
timer1->Stop();
}
private: System::Void numericUpDown1_ValueChanged(System::Object^ sender, System::EventArgs^ e) {
//int kankaku;
kankaku=numericUpDown1->Value.ToInt32(numericUpDown1->Value) ;
}
【プログラム説明】
flagAはUSBIOへの出力をONとOFFをuio_outでそれぞれタイマー時間のインターバルで切り替えるためのフラグとしました。kakunin変数にはタイマーで指定するintervalへの時間値(msec単位)を入れます。これはニューメリックコントロールにて範囲1(≒1msec)から10000(10秒)までをプロパティのmaximum,minimunで設定します。コードはプロパティのイベント(雷マーク)を押してアクションのValueChangedをクリックしてコードをそこに書き込みます。ここで時間がかかりました。大変だったのは読み取ったValue値を変数のintに入れることでのエラー発生です。ToInt32を用いて32ビットのintに変換するのはわかったのですが、引数に何を入れるかが解りませんでした。実際の同じ値を示す部分を入れることで解決しました。(numericUpDown1->Value)しかしこの値を別のint変数に代入して変数化は出来ませんでした。もしかしたら変数でなくオブジェクトとして入れるべきなのか?いまははっきり解りません。
NG----------------------------------------------
int hensu;
hensu=numericUpDown1->Value
kankaku=numericUpDown1->Value.ToInt32(hensu) ;
------------------------------------------------
やはり直接でないとだめなのか?
c++の変数の使い方が間違っているのか?はっきり解らないのが実際のところです。まず簡便化はさておいて、動くセンテンスで進めました。
後はコマンドボタンをスタートとストップを用意してスタートではタイマーコントロールの開始制御を記述します。フラグ初期値を0に設定して、タイマーインターバルは先のニューメリックコントロールのkankaku変数を設定します。そしてタイマーのスタートをtimer1->Start();を書きます。ストップボタンは単にタイマーを止めるTimer->Stop();の一行です。
以上でビルドすると完成です。
実際の動作はニューメリックコントロールでタイマーインターバルを選択設定しスタートボタンを押すとタイマーインターバル値間隔でUSBIOの出力が点滅します。色々とインターバルを変えるとフラッシュの間隔が変わる為面白いですよ。
以上タイマーコントロールとニューメリックコントロールのC++での使い方が解りました。続く