Lesson2 プチロボをC#言語で動かす(1)



2-1 Visual Studio 2008でRS-232Cを使えるようにする

ここでは、ウインドウ(パネル)を作り、右回りのボタンと左回りのボタンをそのウィンドウに配置し、そのボタンを押すとRS-232Cのシリアル通信でプチロボのインターフェースにコマンドを送り、サーボモータを動かすテストプログラムを作ってみます。これを改造してCで作ったプログラムを参考にしてさらにグレードアップしていきます。

2-2 ウィンドウを作る

  1. Visual Studio 2008を起動し、ファイルメニューから新規作成→プロジェクトを選ぶ。
  2. 左上の「プロジェクトの種類」のところは「Visual C#」のところの「Windows」を選ぶ。
  3. 右上の「テンプレート」は「Windows フォームアプリケーション」を選ぶ。
  4. プロジェクト名は何でもいいですが、ここではpuchiRS232Cとします。すると下のソリューション名も自動的に同じ名前が代入されますが、そのままにします。
  5. 場所は、自分がこのプロジェクトを格納したいパスを指定します。デフォールトではVisual Studioのプロジェクトのところになっているので、これをそのまま用いても良いです。が、ここでは、場所を変えてみます。参照ボタンを押して、そのフォルダを指定します。ここではC:\prog\C#\puchiを指定しました。



  6. OKボタンを押します。するとC:\prog\C#\puchiフォルダの中にpuchiRS232Cというフォルダが出来て、プロジェクト一式の大元が出来上がりました。これを元に作っていきます。

    フォルダの構造は大体以下のようになります。
    ┌bin┼
    ┌─puchiRS232C─┼obj┼
    ├Properties┼
    ├Form1.cs
    ├Form1.Designer.cs
    ├Form1.resx
    puchipuchiRS232C┼puchiRS232C.sln
    └puchiRS232C.suo




  7. とりあえず、このままコンパイル・実行してみます。ビルドとデバッグメニューの下あたりにある三角の緑アイコンを押します。

    次のようなウィンドウだけが表示されます。



  8. このウィンドウの左上のタイトルがデフォールトのForm1なのでまずは、これを変更してみましょう。
    右下のプロパティの部分の「Text」の値がここに表示する文字列なので、ここに「puchiRS-232C」と入れて、再度コンパイル・実行してみます。
  9. これでウィンドウの元が出来上がりました。

2-3 シリアルポートの設定

  1. シリアルのコントロールを使えるようにします。これはRS-232Cを使えるようにするとことと同じ意味です。これを行うには、左側にあるツールボックスの中にあるSerialPortをドラッグして真ん中のForm1.csのウィンドウデザインのところに置きます。すると、以下のようにウィンドウのデザインの下に配置されます。



  2. コンピュータ側のシリアルポートの設定は済んでいるとします(USB-RS232C変換器のドライバーのインストールなど)
  3. シリアルポートのポート番号を調べます。(Vistaの場合)
    スタート→コンピュータ→右クリック→プロパティ。   あるいは
    スタート→コントロールパネル→システム   
    出てきたウィンドウの左側にあるシステムの詳細設定をクリック→
    システムのプロパティが表示される→ハードウェアタブを選ぶ→ デバイスマネージャボタンを押す→デバイスマネージャのウィンドウが出現→ ポート(COMとLPT)を開く→用いているUSB変換器のポート番号を調べる→例えばUSB SerialPort(COM4)とあったら番号は4
    →この番号を記録し、開いたウィンドウを閉めて終了。
  4. Visual Studioに戻って、先ほど貼り付けたSerialPort1とあるアイコンをクリックします。すると右下のプロパティにそのコントロールのデフォールトの内容が表示されます。これはそのまま使えるわけが無いので変更が必要です。まず一番初めは今調べたポート番号の変更です。
    PortNameにポート番号を入れます。調べた番号は4なのでCOM4に変更します。
  5. 次に通信する速度を指定します。プチロボとの通信は4800bpsなので、BaudRateを4800にします。
  6. プチロボとの通信はハードウェアフローを用いますので、RtsEnableをTrueにします。
  7. 他のところはいじりません。

2-4 ボタンを付けてサーボモーターを動かしてみる

右に回すボタンと左に回すボタンを付けてみます。とにかくテストプログラムなので0番のサーボモータを動かすだけです。
  1. 左側のツールボックスからButtonを選び、デザインウィンドウにドロップします。二つ目をその下にドロップします。上側がbutton1、下側がbutton2なっているはずです。



  2. button1をクリックして選択すると、右下にそのプロパティが表示されます。ここでは、上側を右回転にしたいので、button1の文字を「右回転」に変えます。それには、Textプロパティの値を「右回転」にします。同様にbutton2のTextプロパティの値を「左回転」にします。



  3. シリアルの設定のプログラムをアプリケーション開始時に行うメソッドを作ります。色々な作り方が考えられますが、ここではウィンドウが作られたらその設定を行うようにしてみます。それには、デザインウィンドウのボタンのない空白部分をダブルクリックします。すると、以下のようにウィンドウが作られた時に実行される部分が表示されます。
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace puchiRS232C
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
        }
    }
    
    Form1_Loadの中に以下のコードを書き入れます。
    行っていることは単にシリアルポートを開くことだけです。
                try
                {
                    serialPort1.Open();
                }
                catch (Exception)
                {
                    serialPort1.Close();
                    Console.Beep();
                }
    
  4. 次にプチロボにコマンドを送るメソッドをその下に作ります。次のコードを付け加えてください。
            byte[] buffer = { 0xfd, 0xdd, 0, 0 };
    
            private void servo(int num, int value)
            {
                buffer[0] = (byte)0xfd;
                buffer[1] = (byte)(0xdd + num);
                buffer[2] = (byte)value;
                buffer[3] = (byte)(value + num + 1);
                serialPort1.Write(buffer, 0, 4);
            }
            private void FreeMode(int num)
            {
                buffer[0] = (byte)0xfd;
                buffer[1] = (byte)(0xdd + num);
                buffer[2] = (byte)0;
                buffer[3] = (byte)(num + 1);
                serialPort1.Write(buffer, 0, 4);
            }
    
  5. 次に、ボタンを押したらサーボモーターが動くようにしてみます。デザインにある右回転のボタンをダブルクリックします。このようにすると、このボタンが押された時に処理するメソッドを作るウィンドウが開きます。以下のように表示されると思います。

            private void button1_Click(object sender, EventArgs e)
            {
    
            }
    
    ここにサーボモータ0を右に動かすコードを書き入れると以下のようになります。
            private void button1_Click(object sender, EventArgs e)
            {
                servo(0, 220);
            }
    
    同様に左回転のメソッドを作り、そこにはservo(0,1);をコードとして挿入します。
  6. プチロボを接続し、電源を入れて、コンパイル・実行します。ボタンを押すと0番のサーボモーターが端から端まで回るはずです。
  7. このプログラムは単に動かすテストをするものですから、これをそのまま拡張するというお馬鹿なことは考えてはいけません。正しいクラスを作り、それを利用するように作らなければ訳が分からないプログラムが出来上がってしまいます。