JUST GO

[공통] RS232 UI 임베디드 애플리케이션 구현 본문

임베디드/학습내용

[공통] RS232 UI 임베디드 애플리케이션 구현

root_go 2022. 11. 4. 13:55

  • Form1.cs [디자인]

  • Form1.cs
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;  // RS232통신(시리얼통신) IO.Ports 활성화

namespace Form1.cs
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            COM_port.DataSource = SerialPort.GetPortNames();
        }

        // 연결 버튼
        private void connect_Click(object sender, EventArgs e)
        {
            if(!serialPort1.IsOpen) // 시리얼포트가 열려 있지 않으면
            {
                serialPort1.PortName = COM_port.Text;   // 콤보박스의 선택된 COM포트명을 시리얼포트명으로 지정
                serialPort1.BaudRate = 9600;
                serialPort1.DataBits = 8;
                serialPort1.StopBits = StopBits.One;
                serialPort1.Parity = Parity.None;
                serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); // 이것이 꼭 필요하다.

                serialPort1.Open(); // 시리얼포트 열기

                connection_status.Text = "포트가 열렸습니다.";
                connection_status.ForeColor = Color.Green;
            }
            else // 시리얼 포트가 열려 있으면
            {
                connection_status.Text = "포트가 이미 열려 있습니다.";
                connection_status.ForeColor = Color.Blue;
            }
        }

        // 해제 버튼
        private void disconnect_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)  // 시리얼포트가 열려 있으면
            {
                serialPort1.Close();    // 시리얼포트 닫기
                connection_status.Text = "포트가 닫혔습니다.";
                connection_status.ForeColor = Color.Red;
            }
            else // 시리얼포트가 닫혀 있으면
            {
                connection_status.Text = "포트가 닫혀 있습니다.";
                connection_status.ForeColor = Color.Blue;
            }
        }

        private void connection_status_Click(object sender, EventArgs e)
        {

        }

        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            this.Invoke(new EventHandler(MySerialReceived));
        }


        private void MySerialReceived(object s, EventArgs e)
        {
            try
            {
                int iRecSize = serialPort1.BytesToRead;  // 수신된 데이터 갯수

                if (iRecSize != 0) // 수신된 데이터의 수가 0이 아닐때만 처리하자
                {
                    byte[] buff = new byte[iRecSize];
                    try
                    {
                        serialPort1.Read(buff, 0, iRecSize);
                        txbRXText.AppendText(System.Text.Encoding.UTF8.GetString(buff, 0, buff.Length));
                        // 텍스트를 추가하겠다.
                    }
                    catch { }
                }
            }
            catch (System.Exception) { }
        }

        private void txbRXText_TextChanged(object sender, EventArgs e)
            // 텍스트 체인지 함수 생성
        {

        }

        private void Button_Click(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen)
            {
                MessageBox.Show("포트가 열려있지 않습니다.");
                return;
            }
            Button btn = (Button)sender;
            serialPort1.Write(btn.Name.Substring(1));
        }

        // 컨트롤 초기화
        private void button1_Click(object sender, EventArgs e)
        {
            foreach (Control ctrl in this.Controls)
            {
                if (ctrl is TextBox)
                {
                    TextBox tb = (TextBox)ctrl;
                    if (tb != null)
                    {
                        tb.Text = string.Empty;
                    }

                    else if (ctrl is ComboBox)
                    {
                        ComboBox dd = (ComboBox)ctrl;
                        if (dd != null)
                        {
                            dd.Text = string.Empty;
                            dd.SelectedIndex = -1;
                        }
                    }
                }
            }
        }
    }
}

'임베디드 > 학습내용' 카테고리의 다른 글

[공통] SSMS  (0) 2022.12.02
[공통] 임베디드  (0) 2022.11.18
[공통] 초음파 센서로 거리 측정해보기  (0) 2022.11.18
[공통] 비트연산  (0) 2022.11.04
[공통] LED 제어하기  (0) 2022.11.04