2013-06-01 6 views
0

좋아, 문제가있어. 저는 마이크로 소프트 비행 시뮬레이터 X SDK와 Arduino를 사용하는 프로그램을 만들고 있습니다. 응용 프로그램은 아두 이노 보드에 시리얼 포트를 통해 데이터를 전송하도록되어, 나는이 기능을 사용하고 있습니다 :시리얼 포트 통신 Arduino, C++

http://playground.arduino.cc/Interfacing/CPPWindows

프로그램이 갑자기 작동을 중지하는 것을 제외하고 완벽하게 작동합니다. 이 프로그램은 (1) 시뮬레이터에 데이터를 요구하는 함수를 연속적으로 실행 한 다음 직렬로 문자열을 보내는 while 루프입니다.

WriteData((char *)cadena.c_str(),8); 

cadena 내가 보내고있다 문자열 인 : 이것은 내가 함수 writeData는 부르는 방법입니다. 함수 writeData는은 이것이다 : 나는 기능 WriteFile가 호출되지 않도록, 전체 if-else를 언급하는 경우, 프로그램이 작동을 중지하지 않고 사실을 제외하고 (완벽에가는 것을 본 적이

bool Serial::WriteData(char *buffer, unsigned int nbChar) 
{ 
    DWORD bytesSend; 
    //Try to write the buffer on the Serial port 
    if(!WriteFile(this->hSerial, (void *)buffer, nbChar, &bytesSend, 0)) 
    { 
     //In case it don't work get comm error and return false 
     ClearCommError(this->hSerial, &this->errors, &this->status); 

     return false; 
    } 
    else 
     return true; 
    } 

정보가 Arduino로 전송되지 않음). 그 라인이 실행되면 1 분 정도 후에 프로그램이 멈 춥니 다. 그리고 멈추는 것만으로도 충돌이나 어떤 의미가있는 것은 아닙니다. 단지 멈추는 것을 의미합니다. 콘솔은 여전히 ​​모든 메시지와 함께 작동하며 멈추는 것입니다.

무슨 일이 벌어 질 수 있습니까?

편집 : 좋아, Arduino도 프로그램에서 읽지 않은 연속적으로 데이터를 보내고 있었는데 이것이 문제가 될 수 있습니까? 버퍼가 꽉 찼고 WriteFile이 쓰는 공간을 기다리고 있었을 수 있습니까? 직렬로 쓰지 않는다는 것을 알고 있기 때문에 잘 작동하는 것 같습니다 ...

답변

0

WriteFile() 송신 버퍼가 용량을 채울 때. 핸드 셰이 킹을 올바르게 설정하는 경우에만 비워집니다. 전기적으로, Arduino에서 건너 뛴 경향이있는 DSR 및 CTS 신호를 배선합니다. 또는 핸드 쉐이킹을 해제하여 SetCommState() 함수를 호출합니다. SetCommTimeouts()로 시간 초과를 설정하는 것은 최소한의 오류 복구를 추가하는 또 다른 전략입니다.

Arduino에서 보낸 데이터를 읽지 못하면 많은 점수를 얻지 못합니다. 이 점진적으로 구현하는 것이 가장 좋습니다. 그래서 한 번에 한 가지 문제를 해결하는 데 집중할 수 있습니다. 그러나 일반적으로 PC가 데이터를 전송하는 것을 방해하지는 않습니다.

+0

답변 해 주셔서 감사합니다. 나는 그것이 작동하는 방법을보기 위해 그 중 일부를 시도 할 것이다. – MyUserIsThis