2016-09-11 10 views
0

일부 코드에서는 속도가 빠릅니다.Arduino와의 C# 직렬 통신 문제

그래서 두 코드의 전송 속도를 높이고 싶습니다. & Arduino. 그러나 9600 보오율을 그대로두면 데이터가 제대로 수신되지 않고 &으로 전송됩니다. 그래서 간단한 테스트 프로그램을 설정했습니다.

아두 이노 코드 :

void setup() 
{ 
    Serial.begin(9600); 
    Serial.setTimeout(10); 
} 

void loop() 
{ 
    if (Serial.available()) 
    { 
     String Data = Serial.readStringUntil('#'); 
     if (Data == "Test") 
     { 
      Serial.println("Recived"); 
     } 
    } 
    delay(1); 
} 

C# 코드 :

SerialPort Port = new SerialPort("COM4", 9600); 
Port.Open(); 
if (Port.IsOpen) 
{ 
    Port.Write("Test#"); 
    System.Threading.Thread.Sleep(1000); 
    String Read = Port.ReadExisting(); 
    Port.Close(); 
} 

그래서 문자열 읽기 "Recived \ 연구 \ n"로 돌아 오는 것을 실행. 전송 속도를 19200으로 변경하면 ""이 다시 나타납니다.

왜 이런 현상이 발생하는지 알고 싶습니다.

편집 : Arduino IDE의 직렬 모니터 프로그램을 사용하면 사용 된 전송 속도와 상관없이 정상적으로 작동합니다. 그것으로 곧 C#을 사용하여이 문제가 발생합니다. 내가 믿는 하드웨어 문제를 배제한 것은 무엇인가.

+0

http://stackoverflow.com/questions/11197097/how-to-read-a-string-value- delimeter-on-arduino와 함께 – MethodMan

+0

핸드 셰이크 속성을 설정해야합니다. 그렇게하지 않으면 마지막으로 사용한 프로그램이 해당 포트에 사용 된 핸드 셰이크 모드가됩니다. 또는 이러한 프로그램을 사용하지 않았거나 프로그램이 포트를 닫을 때 프로그램이 복원하면 시스템 기본값입니다. Arduino는 핸드 쉐이크 신호를 구현하지 않기 때문에 매우 귀찮은 경향이 있습니다. 핸드 셰이크로 설정해야합니다. 명시 적으로 없습니다. –

답변

0

입력 해 주셔서 감사합니다.

이유에 대해 명확하게 설명하지는 않지만 해결책을 찾았습니다.

나는 Serial.Avalible() 명령 때문이라고 생각합니다. 일부 데이터를 먼저 보내야 포트가 열려 있음을 알릴 수 있습니다.

그래서이 내 C# 코드를 수정 : 작품

SerialPort Port = new SerialPort("COM4", 9600); 
Port.Open(); 
if (Port.IsOpen) 
{ 
    Port.Write("#"); 
    Port.Write("Test#"); 
    System.Threading.Thread.Sleep(1000); 
    String Read = Port.ReadExisting(); 
    Port.Close(); 
} 

감사에게 많은

0

PC에서 문자를 한 번에 전송하고 Serial.read()를 사용하여 arduino의 버퍼로 문자를 읽으십시오. 때로는 높은 전송 속도로 PC에서 전체 텍스트를 전송하는 것이 arduino가 처리하기에는 너무 많습니다.