inはじめに今回はボタンやトラックバーにイベントを追加して、ICSサーボモーター制御プログラムを完成します。イベントとは「ボタンをクリックすると~~になる」というプログラムを作るときの「クリックすると」の部分です。ボタンの場合ですと「Click」というイベントがすでに用意されていますので、そのイベントについてプログラムを書き込むだけです。前回フォーム上にたくさんのコントロールを配置しましたが、ここでは必要なイベントをまとめておきます。前回のプロジェクト(またはソリューションファイル)を読み込み、次の手順でイベントを追加します。フォームが表示されない場合は、ソリューションエクスプローラーウィンドウを開き、「Form1.vb」アイコンをダブルクリックしてください。Form1.vb[デザイン]タブをクリックしてフォームを表示します。イベントを追加したいコントロールをクリックして選択します。プロパティウィンドウのツールバーにあるイベントボタン(稲妻マーク)をクリックして、選択したコントロールのイベント一覧を表示します。イベント名の横の空欄をダブルクリックするとソースコードにイベントのひな形が追加されますので、そのひな形の中にプログラムを書きます。ComboBox1でCOMポート選択ComboBox1コントロールのプルダウンメニューを開いたら、現在PCで接続可能なCOMポート一覧を表示するイベントを作ってみます。プルダウンメニューを開くイベントは「DropDown」イベントです。フォーム上のComboBox1コントロールをクリックして、プロパティウィンドウの「DropDown」イベント名の横にある空欄をダブルクリックするとプログラムウィンドウが表示され、DropDownイベントのひな形が表示されます。ひな形が表示されましたら、下のプログラムを入力してください。入力するのはComboBox1.Items.Clear()~の2行だけです。Sub入力が完了しましたら、F5キーを押してデバッグ実行してみてください。ComboBox1コントロールの横にある下向き矢印ボタンを押すと、現在PCに接続されているCOMポート一覧が選択できるようになっています。次にButton1を使ってComboBox1コントロールで選択したCOMポートに、SerialPort1コントロールを接続してシリアル通信可能な状態にします。フォーム上にあるButton1コントロールを選択し、プロパティウィンドウから「Click」イベント名を探します。見つかったら左の欄をダブルクリックして「Click」イベントのひな形をプログラムに追加します。追加できたら下のプログラムを入力してください。Subボタンを押したときに現在の接続状態を調べることは面倒なので、ボタンを押したら無条件でいったん通信を切断しています。そのあとでComboBoxコントロールで正しいCOMポートが選択されているか確認し、接続を行っています。TrackBar1を動かしたらサーボを動かす最後にTrackBar1を左右にスライドさせたら、その位置に合わせてサーボモーターを動かすプログラムを作成します。TrackBar1コントロールを選択し、プロパティウィンドウから「ValueChanged」イベントを追加してください。このイベントは、TrackBarコントロールをスライドさせたり直接値を代入した場合に発生します。イベントのひな形が追加されたら、下のプログラムを入力してください。Subここでは前回作成したSetPosコマンドを使っています。ID番号(NumericUpDown1.Value)とTrackBarコントロールのスライド位置(TrackBar1.Value)をSetPos関数に送ってサーボモーターを動かし、サーボモーターから返ってきた値が正しい場合はTextBox1コントロールに結果を表示しています。SetPos関数でポジションコマンドを送ったときに返ってくる値は、サーボモーターがコマンドを受け取った時点での位置です。サーボモーターはコマンドで指示された位置へ到達しているわけではありませんので、スライドバーの位置とTextBox1の値は必ずしも連動しません。PCから直接制御編(その1)」を参照)ので、「エラーが起きていない場合は返値をTextBox1に表示する」という処理をしています。Basicでは「~に等しくない」という条件を「<>」と表現します。C言語における「!=」にあたります。プログラムを実行しましょう以上でプログラムは完了です。F5キーを押してプログラムを実行し、下記手順でモーターを動かしてみてください。USBアダプターに接続する。内容を非常に簡略化したので、ボタンを押したときにCOMポートが正しく接続されているか分かりにくいので、正しく接続したときにはにフォームのタイトルバーに「接続完了」と表示するように下記プログラムを追加してもいいでしょう。Subまとめサーボモーターを動かすGUIプログラムが、なんと40行程度の入力で完成しました(※予期せぬエラーを防ぐような仕組みは、説明を簡単にするためにあまり取り入れていません)。ICS規格は半二重通信ですので、特に送受信タイミングもそれほどシビアではなく、プログラミングも簡単です。SetPos関数と同様にSetSpeedやSetStretch関数などを作成して、コントロールを追加すれば簡単にサーボモーターの特性を変えることもできます。C#でプログラムを作成しましたので、ダウンロードしてご利用ください。<注意点>下のZIPファイルを解凍しますと、それぞれ「IcsSetPosition_CSS」、「IcsSetPosition_CPP」、「IcsSetPosition_VB」というフォルダができます。それぞれのフォルダには「Debug」というフォルダがありますので、その中にある「IcsSetPosition.exe」を起動してください。Studioソリューションファイルがあります。プログラムを書き直したい場合はこちらをダブルクリックして開いてください。Studioではソリューションファイルを開くことはできません。Form1.vb)を参照にプログラムを書き直してください。Studioでも使い方はそれほど変わりません。ソリューションファイルを開いたときにフォームが表示されない場合は、ソリューションエクスプローラーウィンドウからForm.vb(またはForm.cs、Form.h)をダブルクリックして開くとフォームが表示されます。