close

Trust Me!! Trust You!!


  • Blog
  • Local Log
  • Tag Cloud
  • Key Log
  • Guestbook
  • RSS Feed
  • Write a Post
  • Admin

혹시 블로그 스킨이 깨져 보이시나요? 최신버전의 Internet Explorer(Windows용), Opera, Firefox를 사용해보세요.

C# 시리얼 통신 232c 예제

App 프로그래밍
2016/06/21 14:26
 
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;

namespace SerialTest1
{
    public partial class Form1 : Form
    {
        delegate void MyDelegate();      //델리게이트 선언(크로스 쓰레드 해결하기 위한 용도)

        bool SendForamt = true;          // true : ASCII   false : HEX
        bool ReceiveFormat = true;       // true : ASCII   false : HEX

        public Form1()
        {
            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();
            }
        }

        void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            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]);
                }

                //헥사로 바꿔서 출력
                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);
                }

                //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("포트가 연결되지 않았습니다.");
            }
        }

        private void cb1_SelectedIndexChanged(object sender, EventArgs e)
        {
            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;
            }

            catch
            {
                MessageBox.Show("해당포트의 연결을 다시 확인하십시요");
            }
            
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            serialPort1.DataReceived -= new SerialDataReceivedEventHandler(serialPort1_DataReceived);
            serialPort1.Close();
            btnClose.Enabled = false;
            btnOpen.Enabled = true;
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            txt1.Text = "";
        }

        private void cbReceiveFormat_SelectedIndexChanged(object sender, EventArgs e)
        {
            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;
            }
        }

        private void cbBaudrate_SelectedIndexChanged(object sender, EventArgs e)
        {
            serialPort1.BaudRate = int.Parse(cbBaudrate.Text);
        }

        private void cbDataBits_SelectedIndexChanged(object sender, EventArgs e)
        {
            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;
            }
            
        }

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

http://alsrns5052.tistory.com/entry/c-% ··· 58b%25a0

이올린에 북마크하기
No received trackback. / No comment.

Trackback Address :: http://viper150.cafe24.com/trackback/281

You can also say.

Prev 1 ... 19 20 21 22 23 24 25 26 27 ... 298 Next
블로그 이미지
이것저것 불펌금지도 퍼다가 담습니다. 외부에 비공개된 페이지 입니다. By. 어른왕자

카테고리

  • 전체 (298)
    • 사는 이야기 (115)
    • 웹 프로그래밍 (102)
    • App 프로그래밍 (22)
    • IT 뉴스&기타 (22)
    • 박한별 (4)
    • 역사&기타지식 (9)

태그목록

  • IU
  • 탭추가
  • 코막
  • VB
  • 히든메뉴
  • eclipse
  • 체력
  • 훈장
  • 우리
  • BOA
  • C Left
  • 합금
  • spring
  • SLRCLUB
  • 보안
  • sbs
  • pixlr
  • 울트라에디터
  • 김혜수
  • BrowserHelperObjects
  • 노트5
  • 프레젠테이션 매거진
  • Jdk
  • 다이알로그
  • 게임중독
  • 전업남편
  • hiddenmenu
  • POST
  • 짱난다DB2
  • 붕당정치

최근에 올라온 글

  • 보험사의 조정신청 대응방법.
  • 어느 천재의 앞선 시선.
  • [병맛더빙] 누구게..... (1)
  • 韓경제 `회색 코뿔소` 상황...
  • SVN Connector 설치 URL.
  • 군대를 가지 않는 서울대생.
  • “운은 하늘의 귀여움 받는...
  • 목장에서 알바하다가 캐스...
  • [펌]믿고 거르는 관상.
  • 하루에 1세트씩 하면 좋다...

최근에 달린 댓글

  • <p align="center"><a href="h... 미구구나 01/17
  • <p align="center"><a href="h... 미구구나 01/17
  • <p><img src="https://i.imgur... 덤프 01/13
  • <p><img src="https://i.imgur... 덤프 01/13
  • <p><img src="https://i.imgur... 덤프 01/13

최근에 받은 트랙백

  • công ty may đồng phục. công ty may đồng phục 01/08
  • Israelnightclub`s recent blo... Israelnightclub`s recent blo.. 01/06
  • Suggested Browsing. Suggested Browsing 01/06
  • similar site. similar site 01/06
  • לאתר הבית שלנו. לאתר הבית שלנו 01/06

글 보관함

  • 2019/03 (1)
  • 2018/12 (1)
  • 2018/09 (1)
  • 2018/08 (1)
  • 2018/02 (1)

달력

«   2021/01   »
일 월 화 수 목 금 토
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

링크

  • Total : 261761
  • Today : 23
  • Yesterday : 50
Tattertools
Eolin
rss

어른왕자's blog is powered byTattertools1.1.2.2 : Animato