태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

티스토리 툴바





시리얼 포트에 수신된 바이트를 읽어오는 방법은 굉장히 간단하다

richTextBox2.Text += string.Format("{0:x}", serialPort1.ReadByte());  
richTextBox에 이런식으로 넣으면 확인할 수 있다.

하지만 이 명령어를 아무 곳에다가 넣었다가는 프로그램이 멈춰버리는 현상이 일어난다.

이는, ReadByte()라는 명령어의 특성 때문인데, ReadByte()는 수신된 데이터가 있으면 이를 읽어오지만, 수신된 데이터가 없으면 수신될 때까지 기다리는 녀석이다.
때문에, 시리얼포트로 데이터가 수신돼었다는 것을 확신할 수 있을 때만 사용해야한다.

그럼 언제 데이터수신을 확신할 수 있느냐?


바로 DataRecieved()라는 녀석이다.


시리얼포트에 데이터가 수신되면 호출되는 함수이기때문에, 이 녀석을 이용하면 데이터가 수신되는 것을 확인할 수 있다.


하지만 DataRecieved()는 데이터가 수신되는 순간 호출되기 때문에 내가 원하는 시간에 이 함수를 호출할 수는 없다.

그렇다면, 시리얼포트로 어떠한 데이터가 수신되었고 이 후에 원하는 어떤 시간에 내가 원하는 명령을 줄 순 없을까?
다시말해,

1초에 한 번씩 어떤 함수를 호출해야하는데, 조건이 시리얼포트로 데이터가 수신되었을 때만 호출하는 것이다.
즉, 1초에 한번씩 Count하는데, 시리얼포트에 데이터가 수신되었을 때만 Count를 두 개씩 올려야한다면?


private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            serial1_flag = true;
        }


이와 같이 serial1_flag라는 BOOL타입의 변수를 전역변수로 지정한 다음, DataReceived가 호출되면 이 녀석을 true로 만든다.

그리고 1초에 한 번씩 tick이 걸리는 타이머에서 
if(serial1_flag)
{
do sth you want();
serial1_flag = false;
}


이러면 해결할 수 있다.
저작자 표시 비영리 변경 금지