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
과 같은 결과가 나옵니다. 항상 마지막 자릿수는 임의로 잘립니다. 나는 이것이 타이밍 문제라고 생각하지만 이것에 대한 해결책을 찾지 못했습니다.
readAll()은 지금까지받은 바이트를 반환합니다. 일반적으로 단지 1 또는 2 바이트 인 빠른 PC에서. 전송 속도를 높이는 것은 해결책이 아니므로 더 많은 바이트를 얻을 수 있지만 정확히 얼마나 많은 것이 보장되는지는 알 수 없습니다. 스마트 한 방법은 '\ n'을 보내어 Qt 코드에서 readLine()을 사용할 수있게하는 것입니다. 이제는 Arduino에서와 같은 방식으로 작동하고 잘못되지 않습니다. –
Qt 코드에서'readLine()'과 Arduino 코드에서'Serial.println()'으로 시작해서 같은 행동을 경험했습니다. 우연히 아무 것도 놓치지 않았다면 다시 확인해 보겠습니다. – tobilocker