2011-10-15 7 views
1

저는 컴퓨터를 통해 USB를 통해 연결된 Arduino를 가지고 있습니다. 그것에서 COM 포트에서 읽으려고합니다.시리얼 입력을 읽을 수 없습니다

누구나 뻔뻔스럽게 이것에 문제가 있는지 아무도 볼 수 있습니까 ???

지금 당장 예상치 못한 경우에도 '내가 치려고하는 진술'에 항상 부딪칩니다. 디버깅은 항상 버퍼의 내용이 많은 쓰레기임을 보여줍니다. 나는 직렬 모니터에서 무엇을 볼 수 있느냐에 따라 직렬 입력에서 오는 것이 옳다는 것을 안다.

생각하십니까?

답변

3

exitStatus 변수를 평가하지 않았으므로 읽기 성공을 나타낼 수 있습니다.

또한 1 바이트 만 읽으려면 메모리를 malloc 할 필요가 없습니다. 포인터를 로컬 char 변수에 전달하면됩니다. 내가에있어 동안 내가 의심 때문에

는 그리고 메인의 형태는! = 0 수표! = '0'으로 변경 int main() 또는 int main(int argc, char** argv)

int main() 
{ 
    int exitStatus; 
    unsigned int bytesToRead = 1; 
    unsigned char buffer; 
    Serial *connection = new Serial("COM3"); 

    if(connection->IsConnected()){ 
     exitStatus=connection->ReadData(&buffer, 1); 
     if((exitStatus == <Insert the value for a correct read status>) && (buffer != '0')) 
      <statement I'm trying to hit> 
    } 
    return 0; 
} 

갱신 중 하나 거기 직렬 인터페이스에서 오는 '0'문자 (= 0x30)입니다.

+0

아, 내 잘못입니다. 나는이 코드를 여러 번 보았는데, 나는 그 사실을 알아 채지 못했다. 하지만 그건 문제가 아닙니다. exitStatus를 읽은 바이트 수로 설정하여 항상 성공적인 읽기를보고합니다. – ZacAttack

+0

@ ZacAttack 통신이 없다면 터미널 프로그램으로 확인할 수 있습니까? 또한 포트가 올바르게 구성되어 있습니다 (전송 속도, 스톱 비트, 패리티). 나는 당신의 코드에서 명백한 문제를 보지 못했다. – Rudi

+0

Arduino 직렬 모니터를 사용하여 들어오는 것을 봅니다. 버튼을 누르지 않으면 '0'의 스트림입니다. 그런 다음 내려 갔을 때 '1'의 흐름입니다. 나는 당신의 수정을 추가했고, 그들은 그 장소를 확실히 청소했다! 하지만 디버거에서 여전히 이상한 결과를 얻고 있습니다. – ZacAttack

관련 문제