using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace AGB65_4FS_test2 { public partial class Form1 : Form { //フィールド private byte[] sndData; private byte[] rcvData; private byte[] result; static private byte gx = 0; static private byte gy = 0; //コンストラクタ public Form1() { InitializeComponent(); serialPort1.PortName = "COM1"; serialPort1.BaudRate = 9600; serialPort1.Open(); timer1.Interval = 100; //インターバルを100mSに設定 timer1.Enabled = true; timer1.Start(); } //Tickイベント private void timer1_Tick(object sender, EventArgs e) { sndData = new byte[4]; sndData[0] = 255; sndData[1] = Convert.ToByte(id.Text); sndData[2] = 1; sndData[3] = 60; //重心読み取り命令 serialPort1.Write(sndData, 0, 4); } //受信イベント private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { //フォーマット[255][ID][長(3)][命令(60)][X][Y] rcvData = new byte[1]; int length = 0; serialPort1.Read(rcvData, 0, 1); //1バイト目読み込み if (rcvData[0] == 255) //シンクロバイトか? { serialPort1.Read(rcvData, 0, 1); //2バイト目 if (rcvData[0] == (Convert.ToByte(id.Text))) //IDとマッチするか? { serialPort1.Read(rcvData, 0, 1);//3バイト目読み込み(データ長) length = rcvData[0]; result = new byte[length]; for (int i = 0; i < length; i++)//データ長の分、読み込み { while (serialPort1.ReadBufferSize==0) ; serialPort1.Read(result, i, 1); } if (result[0] == 60) //命令60か? { gx = result[1]; //以下表示処理 gy = result[2]; xResult.Text = gx.ToString(); yResult.Text = gy.ToString(); } } } } } }