6・8 Visual C++による超音波センサ距離表示

6・8・1 Visual C++のプロジェクト作成

ここでは、Visual C++のプロジェクト作成とToyOcxの読み込みについて説明します。

6・8・1・1 プロジェクトを作成 する

VisualC++を起動します。
VisualC++を起動後、メニューバーから、[ファイル]-[新規作成]をクリックします。

 

 

 

6・8・1・2 OCXを登録する 

赤で囲まれた部分を左クリックで選択後、右クリックで表示されるウィンドウ内の
「ActiveXコントロールの挿入」を クリックします。


[ToyOcx Control]を選択します。


OKボタンを押すとOCX登録を終了します。

 

6・8・2 超音波センサ取得距離のエディットボックス表示

VisualC++でRoboCubeを制御する方法を紹介します。
このサンプルプログラムでは超音波センサの取得した距離をエディットボックスに表示します。
カーネルブロックの設定・カーネルブロックとパソコンとの接続は、VisualBasicと同様に行います。

6・8・2・1  ブロックの設定と組み立て

カーネルブロックのモードスイッチをプログラムモード(中央)に設定します。
カーネルブロックと超音波センサブロックを接続します。
超音波センサブロックのDigiSwitch番号は「0」に設定しておいてください。

 

6・8・2・2 フォームを作成する
フォームに、接続ボタン・終了ボタンを作成します。

[接続ボタン作成と終了ボタン作成]

黄色の円で囲まれているところは、選択した後にDeleteキーで消去します。
[ボタンの名前設定]

Button1を左クリックで選択後、右クリックで表示されるウィンドウ内の「プロパティ」をクリックします。

 

キャプションを変更後、リターンキーで確定します。

Button2もButton1と同様に、キャプションを「終了」に変更します。

[エディットボックス作成]

 

6・8・2・3 ToyOcx を実行時に非表示する
ToyOcxを左クリックで選択後、右クリックで表示されるウィンドウ内の「プロパティ」をクリックします。


[可視]のチェックボックスをクリックして、チェックを外します。

変更後、リターンキーで確定します。

 

6・8・2・4 メンバ変数を設定する

ClassWizardを使用して、メンバ変数を設定します。

[接続ボタン]

接続ボタンを左クリックで選択後、右クリックで表示されるウィンドウ内の「ClassWizard」をクリックします。

 

1.メンバ変数のタブをクリックします。
2.クラス名は、CtestDlgを選択します。
3.コントロールIDは、IDC_BUTTON1を選択します。
4.変数の追加をクリックします。

1.“m_”となっているので、“m_btn1”にします。
2.OKボタンをクリックすると、メンバ変数にm_btn1が追加されます。

[終了ボタン]

終了ボタンのメンバ変数を設定します。 メンバ変数名を“m_”から“m_btn2”に変更する以外は、
上記の[接続ボタン]と同じ手順で進めます。

[エディットボックス]

エディットボックスのメンバ変数を設定します。

メンバ変数名を“m_”から“m_text”に変更し、カテゴリは“コントロール”を選択します。
それ以外は、上記の[接続ボタン]と同じ手順で進めます。

 

[ToyOcx]

ToyOcxは、メンバ変数の設定とクラスの設定を行います。

ToyOcxを左クリックで選択後、右クリックで表示されるウィンドウ内の「ClassWizard」をクリックします。

 

1.メンバ変数のタブをクリックします。
2.クラス名は、CtestDlgを選択します。
3.コントロールIDは、IDC_TOYOCXCTRL1を選択します。
4.変数の追加をクリックします。

OKボタンをクリックします。


OKボタンをクリックします。


1.“m_”となっているので、“m_toyocx”にします。
2.カテゴリは、“コントロール”を選択します。
3.OKボタンをクリックします。

 

6・8・2・5 メッセージ関数(メッセージハンドラ)とメンバ関数を設定する

ClassWizardを使用して、メッセージ関数とメンバ関数を設定します。

[接続ボタン]

接続ボタンを左クリックで選択後、右クリックで表示されるウィンドウ内の「ClassWizard」をクリックします。

 

1.メッセージマップのタブをクリックします。
2.クラス名は、CtestDlgを選択します。
3.オブジェクトIDは、IDC_BUTTON1を選択します。
4.メッセージは、BN_CLICKEDを選択します。
5.関数の追加をクリックします。



OKボタンをクリックすると、メンバ関数にOnButton1が追加されます。


 

[終了ボタン]

オブジェクトIDは、IDC_BUTTON2を選択します。後は、上記の[接続ボタン]と同じ手順で関数を追加します。

[ToyOcx]

ToyOcxを左クリックで選択後、右クリックで表示されるウィンドウ内の「ClassWizard」をクリックします。

 

1.メッセージマップのタブをクリックします。
2.クラス名は、CtestDlgを選択します。
3.オブジェクトIDは、IDC_TOYOCXCTRLを選択します。
4.メッセージは、BindCompleteを選択します。
5.関数の追加をクリックします。



6.OKボタンをクリックします。

ToyOcxは、「BindComplete」以外に、BindControlComplete・SearchComplete・UsonicDistanceの追加が必要です。 「BindComplete」と同じ手順で、関数を追加します。
7. 4.と同様にメッセージは、BindControlCompleteを選択します。

8. 関数の追加をクリック後、OKボタンをクリックします。

9. 4.と同様にメッセージは、SearchCompleteを選択します。

10.関数の追加をクリック後、OKボタンをクリックします。

11.4.と同様にメッセージは、UsonicDistanceを選択します。

12.関数の追加をクリック後、OKボタンをクリックします。

13.OKボタンをクリックして、完了します。

 

6・8・2・6  接続ボタンの処理を記述する

作成した接続ボタンをダブルクリックし、表示されたコード画面のカーソルの位置に以下のコードを記述します。
通信ポートがCOM1でない場合は、ToyOcx1.OpenCom( )内の数字を変えます。
COM2であれば、ToyOcx1.OpenCom(2)となります。
なお、ここで紹介しているのは、オートバインディングと呼ばれる初期化の手順です。

 

6・8・2・7  フォーム画面(画面作成)とコード画面を切り替える

接続ボタンの処理を記述後、コード画面からフォーム画面に切り替えます。


1.ResourceViewのタブをクリックします。

2.IDD_TEST_DIALOGをダブルクリックすると、フォームの画面になります。

 

フォーム画面からコード画面に切り替える場合
1.FileViewのタブをクリックします。 2.TestDlg.cppをダブルクリックすると、フォームの画面になります。

6・8・2・8  終了ボタンの処理を記述する

フォーム画面から、作成した終了ボタンをダブルクリックし、表示されたコード画面のカーソルの位置に以下のコードを記述します。

6・8・2・9  初期化のための処理を記述する

コード画面に以下のコードを記述します。

 

6・8・2・10 超音波センサの取得した距離をエディットボックスに表示する処理を記述する

フォーム画面からコード画面に切り替えます(2.3.6画面切り替え参照)。
表示されたコード画面に以下のコードを記述します。


 

6・8・2・11 プログラムをビルドする

ビルドが正常に終了すると、プログラムは実行可能状態になります。 メニューバーの[ビルド]-[ビルド]をクリックします。

ビルドを実行すると、一番下のウィンドウに経過が表示されます。

 

6・8・2・12 プログラムを実行する

 1.RoboCubeの電源が入っているかを確認します。
 2.メニューバーの[ビルド]-[実行]をクリックして、プログラムを実行します。

 3.接続ボタンをクリックします。
 4.「接続を完了しました。」のメッセージを表示します。  
5.しばらくすると、エディットボックスに数字を表示します。  
6.超音波センサの上を手などで遮って、距離を取得します。    
  取得した距離は、エディットボックスに表示します。  
7.終了ボタンをクリックして、終了します。

※ 正常に動作しない場合は、RoboCubeの電源を切り、RoboCubeの設定・コードを見直してください。

 

6・8・2・13 プロジェクトを保存する



1.上書き保存をクリックします。 2.ワークスペースの保存をクリックします。

以上の操作を終えると、プロジェクトは保存されます。

 

6・8・2・14 保存したプロジェクトの読み込み

メニューバーの[ファイル]-[ワークスペースを開く]をクリックします。

 


1.保存したファイルをクリックします。

2.開くボタンをクリックします。

開くボタンをクリックすると、プログラムを読み込みますので、
VisualC++が起動したらプログラムを追加していきます。