2015年7月18日土曜日

ゲームの自動操作装置(4):アプリ/シリアル通信部分

ゲームの自動操作装置(3):USBキーボードスケッチ からの続き


以下は自動操作アプリケーションのシリアル通信部の抜粋
開発言語はVC#

.NET FrameworkではSerialPortクラスが準備されており、簡単にシリアル通信が実現できる
今回のプロジェクトでは送信側しか用いないので特に簡単になる

ミニマムな構成は以下になる

・接続部
 任意パラメータでシリアルポート接続を行う

・通信部(送信部)
 シリアル通信で任意データを送信する

・切断部
 接続済のシリアルポート接続を切断する


ここではすべてにボタンが割り振られており、以下はそれぞれをクリックした際のハンドラである
送信するコマンド入力用にnumericUpDownを設けている
抜粋なので定義していない変数も使っているがそこはがんばって類推すること


ゲームの自動操作装置(5):キャプチャ環境 に続く


  
        private void buttonConnect_Click(object sender, EventArgs e)
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    MessageBox.Show(this.textBoxSerialPort + " はすでに開かれています。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    // ポート番号文字列=this.textBox1.Text, 115200bps/N81/ハードウェアフロー/UTF8/改行=CR
                    this.serialPort1.PortName = this.textBoxSerialPort.Text;
                    this.serialPort1.BaudRate = 9600;
                    this.serialPort1.Parity = System.IO.Ports.Parity.None;
                    this.serialPort1.DataBits = 8;
                    this.serialPort1.StopBits = System.IO.Ports.StopBits.One;
                    this.serialPort1.Handshake = System.IO.Ports.Handshake.RequestToSend;
                    this.serialPort1.Encoding = Encoding.UTF8;
                    this.serialPort1.NewLine = "\r";
                    serialPort1.Open();

                    connectFlag = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void buttonSend_Click(object sender, EventArgs e)
        {
            try
            {
                sendBuffer[0] = (byte)this.numericUpDownCommand.Value;
                this.serialPort1.Write(sendBuffer, 0, 1);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }
        private void buttonDisConnect_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                serialPort1.Close();
                connectFlag = false;
            }
        }

0 件のコメント:

コメントを投稿