2016-07-26 4 views
0

Arduino Mega 2560에서 Qt 응용 프로그램으로 간단한 정수 값을 쓰려고합니다. Qt Application에서 serial->write(some_data);으로 열린 포트를 통해 데이터를 전송할 때 Baudrate가 9600으로 설정되고 Serial.read()이 정상적으로 작동합니다.Serial.print()는 QSerialPort로 읽을 때 데이터를 자릅니다.

digitalWrite(SS, LOW); 
if (Serial.available() == 2) { 
    response1 = SPI.transfer(Serial.read()); 
    response2 = SPI.transfer(Serial.read()); 
} 
digitalWrite(SS, HIGH); 

위의 코드는 정상적으로 작동합니다. 이전에 다른 것을 읽었으며이 작업을 수행하려면 delay(3)을 추가해야했습니다. 이제 응답을 보내 드리겠습니다.

Serial.print((response2 << 8) | (response1 & 0xFF)); 

항상 잘린 숫자가 있습니다. 로직 애널라이저에서 응답이 예를 들어 8193와 같이 QByteArray b = serial->readAll();을 입력하면 8, 81, 819 및 때로는 8193과 같은 결과가 나옵니다. 항상 마지막 자릿수는 임의로 잘립니다. 나는 이것이 타이밍 문제라고 생각하지만 이것에 대한 해결책을 찾지 못했습니다.

+0

readAll()은 지금까지받은 바이트를 반환합니다. 일반적으로 단지 1 또는 2 바이트 인 빠른 PC에서. 전송 속도를 높이는 것은 해결책이 아니므로 더 많은 바이트를 얻을 수 있지만 정확히 얼마나 많은 것이 보장되는지는 알 수 없습니다. 스마트 한 방법은 '\ n'을 보내어 Qt 코드에서 readLine()을 사용할 수있게하는 것입니다. 이제는 Arduino에서와 같은 방식으로 작동하고 잘못되지 않습니다. –

+0

Qt 코드에서'readLine()'과 Arduino 코드에서'Serial.println()'으로 시작해서 같은 행동을 경험했습니다. 우연히 아무 것도 놓치지 않았다면 다시 확인해 보겠습니다. – tobilocker

답변

0

같은 문제에 직면 한 사람을 위해 : Baudrate를 9600에서 112500으로 변경하면이 문제가 해결됩니다.

관련 문제