반응형

게임 매크로 만들기#1 시리얼 통신

1. 시리얼 통신을 위한 인터페이스

아래와 같이 그리드 박스를 하나 만들었다.
-. 윗줄은 시리얼로 보낼 메시지, 메시지를 보내는 버튼, 연결 대상을 고르는 ComPort 콤보박스, Comport에 연결하는 버튼
-. 아랫줄은 시리얼 연결을 표시해주는 사항들

 

2. Serial 연결

            if (!_serialPort.IsOpen)  //시리얼포트가 열려 있지 않으면
            {
                //The default is 8 data bits, no parity, one stop bit.
                _serialPort.PortName = CB_ComPortList.Text;
                _serialPort.BaudRate = 9600;  //아두이노 기본설정
                _serialPort.DataBits = 8;  //아두이노 기본설정
                _serialPort.StopBits = StopBits.One;  //아두이노 기본설정
                _serialPort.Parity = Parity.None;
                _serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);  //시리얼 수신 이벤트 처리

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

                

                CB_ComPortList.IsDropDownOpen = false;  //COM포트설정 콤보박스 비활성화
            }
            else  //시리얼포트가 열려 있으면
            {
                _serialPort.Close();
            }

 

3. Serial 보내기 (매우간단)

            _serialPort.WriteLine(TB_SerialSend.Text);  //textbox에 있는 string을 보낸다.

 

 

##. 전체 코드

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO.Ports;
using System.Diagnostics;

namespace autoControl
{
    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class MainWindow : Window
    {

        static SerialPort _serialPort;
        public MainWindow()
        {
            InitializeComponent();
            CB_ComPortList.ItemsSource = SerialPort.GetPortNames(); //연결 가능한 시리얼 포트 목록 불러오기
            _serialPort = new SerialPort();


        }


        
        private void SerialConnectBtn_Click(object sender, RoutedEventArgs e)
        {
            SerialConnect(sender, e);
        }
        private void SerialConnect(object sender, RoutedEventArgs e)  //시리얼 연결 처리
        {
            if (!_serialPort.IsOpen)  //시리얼포트가 열려 있지 않으면
            {
                //The default is 8 data bits, no parity, one stop bit.
                _serialPort.PortName = CB_ComPortList.Text;
                _serialPort.BaudRate = 9600;  //아두이노 기본설정
                _serialPort.DataBits = 8;  //아두이노 기본설정
                _serialPort.StopBits = StopBits.One;  //아두이노 기본설정
                _serialPort.Parity = Parity.None;
                _serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);  //시리얼 수신 이벤트 처리

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

                

                CB_ComPortList.IsDropDownOpen = false;  //COM포트설정 콤보박스 비활성화
            }
            else  //시리얼포트가 열려 있으면
            {
                _serialPort.Close();
            }
        }
        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string indata = sp.ReadExisting();
            Debug.WriteLine("Data Received:");
            Debug.Write(indata);
        }

        private void Btn_SerialSend_Click(object sender, RoutedEventArgs e)
        {
            if(!_serialPort.IsOpen)
            {
                SerialConnect(sender, e);  //혹시 연결 안되어 있으면 연결하고 시작

            }
            _serialPort.WriteLine(TB_SerialSend.Text);  //textbox에 있는 string을 보낸다.
        }
    }
}
728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기