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;
using System.IO.Ports;
출처: https://alsrns5052.tistory.com/entry/C-시리얼-통신 [Min's life]
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace SerialTest1
{
public partial class Form1 : Form
{
delegate void MyDelegate(); //델리게이트 선언(크로스 쓰레드 해결하기 위한 용도)
{
public partial class Form1 : Form
{
delegate void MyDelegate(); //델리게이트 선언(크로스 쓰레드 해결하기 위한 용도)
bool SendForamt = true; // true : ASCII false : HEX
bool ReceiveFormat = true; // true : ASCII false : HEX
bool ReceiveFormat = true; // true : ASCII false : HEX
public Form1()
{
InitializeComponent();
this.Disposed += new EventHandler(Form1_Disposed);
}
{
InitializeComponent();
this.Disposed += new EventHandler(Form1_Disposed);
}
void Form1_Disposed(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.DataReceived -= new SerialDataReceivedEventHandler(serialPort1_DataReceived);
serialPort1.Close();
}
}
{
if (serialPort1.IsOpen)
{
serialPort1.DataReceived -= new SerialDataReceivedEventHandler(serialPort1_DataReceived);
serialPort1.Close();
}
}
void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] array = new byte[1024];
int temp;
string str = string.Empty;
temp = serialPort1.Read(array, 0, 1024);
{
byte[] array = new byte[1024];
int temp;
string str = string.Empty;
temp = serialPort1.Read(array, 0, 1024);
//아스키 값으로 받기
if (ReceiveFormat)
{
MyDelegate dt = delegate()
{
txt1.Text += "Receive Data : ";
for (int i = 0; i < temp; i++)
{
txt1.Text += (char)array[i];
}
txt1.Text += "\r\n";
};
this.Invoke(dt);
}
//HEX 값으로 받기
else
{
for (int i = 0; i < temp; i++)
{
str += string.Format("{0:x2} ", array[i]);
}
if (ReceiveFormat)
{
MyDelegate dt = delegate()
{
txt1.Text += "Receive Data : ";
for (int i = 0; i < temp; i++)
{
txt1.Text += (char)array[i];
}
txt1.Text += "\r\n";
};
this.Invoke(dt);
}
//HEX 값으로 받기
else
{
for (int i = 0; i < temp; i++)
{
str += string.Format("{0:x2} ", array[i]);
}
//헥사로 바꿔서 출력
MyDelegate dt = delegate()
{
txt1.Text += "Receive Data : ";
txt1.Text += str;
txt1.Text += "\r\n";
};
this.Invoke(dt);
}
}
MyDelegate dt = delegate()
{
txt1.Text += "Receive Data : ";
txt1.Text += str;
txt1.Text += "\r\n";
};
this.Invoke(dt);
}
}
private void btnSend_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
//아스키 형태로 보내라
if (SendForamt)
{
serialPort1.Write(txt2.Text);
}
{
if (serialPort1.IsOpen)
{
//아스키 형태로 보내라
if (SendForamt)
{
serialPort1.Write(txt2.Text);
}
//HEX 형태로 보내라
else
{
string str = string.Empty;
byte[] arr = Encoding.ASCII.GetBytes(txt2.Text.ToCharArray());
foreach (byte b in arr)
{
str += string.Format("{0:x2} ", b);
}
serialPort1.Write(str);
}
}
else
{
MessageBox.Show("포트가 연결되지 않았습니다.");
}
}
else
{
string str = string.Empty;
byte[] arr = Encoding.ASCII.GetBytes(txt2.Text.ToCharArray());
foreach (byte b in arr)
{
str += string.Format("{0:x2} ", b);
}
serialPort1.Write(str);
}
}
else
{
MessageBox.Show("포트가 연결되지 않았습니다.");
}
}
private void cb1_SelectedIndexChanged(object sender, EventArgs e)
{
serialPort1.PortName = cbPortName.Text;
}
{
serialPort1.PortName = cbPortName.Text;
}
private void btnOpen_Click(object sender, EventArgs e)
{
try
{
serialPort1.Open();
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
btnClose.Enabled = true;
btnOpen.Enabled = false;
}
{
try
{
serialPort1.Open();
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
btnClose.Enabled = true;
btnOpen.Enabled = false;
}
catch
{
MessageBox.Show("해당포트의 연결을 다시 확인하십시요");
}
}
{
MessageBox.Show("해당포트의 연결을 다시 확인하십시요");
}
}
private void btnClose_Click(object sender, EventArgs e)
{
serialPort1.DataReceived -= new SerialDataReceivedEventHandler(serialPort1_DataReceived);
serialPort1.Close();
btnClose.Enabled = false;
btnOpen.Enabled = true;
}
{
serialPort1.DataReceived -= new SerialDataReceivedEventHandler(serialPort1_DataReceived);
serialPort1.Close();
btnClose.Enabled = false;
btnOpen.Enabled = true;
}
private void btnClear_Click(object sender, EventArgs e)
{
txt1.Text = "";
}
{
txt1.Text = "";
}
private void cbReceiveFormat_SelectedIndexChanged(object sender, EventArgs e)
{
if (cbReceiveFormat.Text == "ASCII")
{
ReceiveFormat = true;
}
else
{
ReceiveFormat = false;
}
{
if (cbReceiveFormat.Text == "ASCII")
{
ReceiveFormat = true;
}
else
{
ReceiveFormat = false;
}
}
private void cbSendFormat_SelectedIndexChanged(object sender, EventArgs e)
{
if (cbSendFormat.Text == "ASCII")
{
SendForamt = true;
}
else
{
SendForamt = false;
}
}
{
if (cbSendFormat.Text == "ASCII")
{
SendForamt = true;
}
else
{
SendForamt = false;
}
}
private void cbBaudrate_SelectedIndexChanged(object sender, EventArgs e)
{
serialPort1.BaudRate = int.Parse(cbBaudrate.Text);
}
{
serialPort1.BaudRate = int.Parse(cbBaudrate.Text);
}
private void cbDataBits_SelectedIndexChanged(object sender, EventArgs e)
{
serialPort1.DataBits = int.Parse(cbDataBits.Text);
}
{
serialPort1.DataBits = int.Parse(cbDataBits.Text);
}
private void cbStopBits_SelectedIndexChanged(object sender, EventArgs e)
{
switch(cbStopBits.SelectedIndex)
{
case 0:
serialPort1.StopBits = StopBits.One;
break;
case 1:
serialPort1.StopBits = StopBits.Two;
break;
default :
serialPort1.StopBits = StopBits.One;
break;
}
}
{
switch(cbStopBits.SelectedIndex)
{
case 0:
serialPort1.StopBits = StopBits.One;
break;
case 1:
serialPort1.StopBits = StopBits.Two;
break;
default :
serialPort1.StopBits = StopBits.One;
break;
}
}
private void cbParity_SelectedIndexChanged(object sender, EventArgs e)
{
switch (cbStopBits.SelectedIndex)
{
case 0:
serialPort1.Parity = Parity.None;
break;
case 1:
serialPort1.Parity = Parity.Odd;
break;
case 2:
serialPort1.Parity = Parity.Even;
break;
default:
serialPort1.Parity = Parity.None;
break;
}
}
}
}
{
switch (cbStopBits.SelectedIndex)
{
case 0:
serialPort1.Parity = Parity.None;
break;
case 1:
serialPort1.Parity = Parity.Odd;
break;
case 2:
serialPort1.Parity = Parity.Even;
break;
default:
serialPort1.Parity = Parity.None;
break;
}
}
}
}
출처: https://alsrns5052.tistory.com/entry/C-시리얼-통신 [Min's life]
댓글