2014-01-06 3 views
1

arduino에서받은 일련의 데이터를 읽어야하는 C# 응용 프로그램을 작성 중입니다. arduino는 다음을 전송합니다.C# 응용 프로그램으로 arduino에서 직렬 데이터 읽기

Serial.write(0x1); 
Serial.write(0x106); 
Serial.write(fake_channel.samples, SAMPLE_COUNT); //Sample array 

샘플 배열은 정수로 채워진 배열 외의 것입니다.

C# 응용 프로그램으로 이것을 읽는 가장 좋은 방법은 무엇입니까? 직렬 데이터에서 정수를 가져와야합니다. 내가 0x1로있어 때, 나는 다음과 같은 방법으로 데이터를 읽을 수 오전 1. 읽고 싶은 :

private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
{ 
    //Code to read the serial data needed here 

} 

내 이전 응용 프로그램에서를, 내가 가진 문자열 형식의 일부 직렬 데이터를 읽을 수 있었다 : serialPort.ReadExisting(); 유일한 문제는 문자열을받는 것이 아니라 바이트처럼 보이는 정수입니다. 그것이 바이트처럼 보이는 것에서 정수를 읽는 것이 가능하기 때문에 내가 혼란스러워하는 부분입니다.

답변

1

DataReceived 이벤트는 몇 바이트가 수신되었다는 것을 알려주며 이동하여 읽을 수 있습니다.

문자열 (문자열 아님)을 읽으려면 serialPort.BytesToRead 속성을 사용하여 읽을 수있는 바이트 수를 알아야합니다. 그런 다음 한 번에 모든 바이트를 읽으려면 serialPort.Read(byte[], int, int) 메서드를 사용하고, 한 번에 한 바이트를 읽으려면 serialPort.ReadByte() 메서드를 사용할 수 있습니다.

사용할 수있는 바이트를 더 읽으려고하면 지정된 바이트 수를 사용할 수있을 때까지 메서드가 차단됩니다. 이를 방지하려면 serialPort.ReadTimeout을 사용하여 읽기 제한 시간을 설정할 수 있습니다.

+0

질문이 하나 남았습니다. serialPort 버퍼가 최대 값을 읽으면 어떻게 될까요? –

+0

버퍼를 채우게되면 모든 후속 바이트가 손실됩니다. – lbarreira

+0

도움을 주셔서 감사합니다. –

관련 문제