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); 
            } 
        }