C# Serial Port 使用方式
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//指示詞
using System.IO.Ports;
using System.Threading;
namespace SerialPort_example
{
public partial class Form1 : Form
{
//console 參數
private SerialPort My_SerialPort;
private bool Console_receiving = false;
private Thread t;
//使用委派顯示 Console 畫面
delegate void Display(string buffer);
public Form1()
{
InitializeComponent();
}
public void ConsoleShow(string buffer)
{
Console_Output.AppendText(buffer);
}
//按鈕事件
private void btn_Send_Click(object sender, EventArgs e)
{
//送出字串
SendData(Encoding.ASCII.GetBytes(Console_Input.Text + "\r"));
}
//連接 Console
public void Console_Connect(string COM, Int32 baud)
{
try
{
My_SerialPort = new SerialPort();
if (My_SerialPort.IsOpen)
{
My_SerialPort.Close();
}
//設定 Serial Port 參數
My_SerialPort.PortName = COM;
My_SerialPort.BaudRate = baud;
My_SerialPort.DataBits = 8;
My_SerialPort.StopBits = StopBits.One;
if(!My_SerialPort.IsOpen)
{
//開啟 Serial Port
My_SerialPort.Open();
Console_receiving = true;
//開啟執行續做接收動作
t = new Thread(DoReceive);
t.IsBackground = true;
t.Start();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//關閉 Console
public void CloseComport()
{
try
{
My_SerialPort.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//Console 接收資料
private void DoReceive()
{
Byte[] buffer = new Byte[1024];
try
{
while (Console_receiving)
{
if (My_SerialPort.BytesToRead > 0)
{
Int32 length = My_SerialPort.Read(buffer, 0, buffer.Length);
string buf = Encoding.ASCII.GetString(buffer);
Array.Resize(ref buffer, length);
Display d = new Display(ConsoleShow);
this.Invoke(d, new Object[] { buf });
Array.Resize(ref buffer, 1024);
}
Thread.Sleep(20);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//Console 發送資料
public void SendData(Object sendBuffer)
{
if (sendBuffer != null)
{
Byte[] buffer = sendBuffer as Byte[];
try
{
My_SerialPort.Write(buffer, 0, buffer.Length);
}
catch (Exception ex)
{
CloseComport();
MessageBox.Show(ex.Message);
}
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Console_receiving = false;
//關閉 Serial Port
CloseComport();
}
private void Form1_Load(object sender, EventArgs e)
{
//連接 Console
Console_Connect("COM18", 115200);
}
}
}