Programming/C#
c# 시리얼통신
여림_
2020. 1. 29. 10:33
public void SerialSet()
{
_serialPort.PortName = cbPortName.Text.ToString();
_serialPort.BaudRate = int.Parse(cbBaudrate.Text.ToString());
_serialPort.DataBits = int.Parse(cbDataBits.Text.ToString());
if (cbStopBits.Text.ToString().Equals("1"))
{
_serialPort.StopBits = StopBits.One;
}
else
{
_serialPort.StopBits = StopBits.Two;
}
if (cbParity.Text.ToString().Equals("None"))
{
_serialPort.Parity = Parity.None;
}
else if (cbStopBits.Text.ToString().Equals("Odd"))
{
_serialPort.Parity = Parity.Odd;
}
else
{
_serialPort.Parity = Parity.Even;
}
}
private void btnOpen_Click(object sender, EventArgs e)
{
SerialSet();
try
{
_serialPort.Open();
_serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
btnClose.Enabled = true;
btnOpen.Enabled = false;
state = true;
}
catch(Exception ex)
{
MessageBox.Show("해당포트의 연결을 다시 확인하십시요");
}
}
void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] array = new byte[1024];
int temp;
string str = string.Empty;
temp = _serialPort.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]);
}
//헥사로 바꿔서 출력
MyDelegate dt = delegate ()
{
txt1.Text += "Receive Data : ";
txt1.Text += str;
txt1.Text += "\r\n";
};
this.Invoke(dt);
}
}