Я новичок в QT C ++ и пытаюсь написать программу, которая могла бы непрерывно читать данные из последовательного порта. Моя программа иногда работает плавно, но иногда считывает неверные данные. Я запустил отладку и вот что у меня получилось:
"61\x00\x00"
"61\x00\x00"
"61\x00\x00"
"62\x00\x00"
"62\x00\x00"
"62\x00\x00"
"62\x00\x00"
"63\x00\x00"
"63\x00\x00"
"5"
"3\x00\x00"
"5"
"2\x00\x00"
"5"
"2\x00\x00"
"54\x00\x00"
"54\x00\x00"
"54\x00\x00"
"55\x00\x00"
"54\x00\x00"
"54\x00\x00"
"55\x00\x00"
"55\x00\x00"
"5"
"1\x00\x00"
"51"
"\x00\x00"
"5"
"2\x00\x00"
"5"
"1\x00\x00"
"5"
"1\x00\x00"
Каким-то образом QTSerialPort не прочитал все данные. А вот мой код, в котором данные должны читаться и отображаться.
if(serial->isOpen() && serial->isReadable()){
QByteArray receivedData;
receivedData = serial->readAll();
qDebug()<<receivedData;
ui->lcdDistance->display(receivedData.toInt());
}else{
QMessageBox::critical(this, tr("Error"), tr("Doesn't receive data"));
}
Я думаю, проблема возникла из QT, а не из микроконтроллера, потому что я также запускаю отладку с помощью своего микроконтроллера, и он работал очень хорошо.
Вот код в моем u C STM32
while (1) {
HAL_UART_Receive(&huart2, rxData, 1, 1000);
if (rxData[0] == '1') { //RUN
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, SET);
lcd_clear();
lcd_put_cur(0, 0);
lcd_send_string("LOADING...");
HAL_Delay(1000);
lcd_clear();
int i = 40;
//HAL_Delay(1000);
while (i < 100) {
htim2.Instance->CCR1 = i;
sensor_time = hcsr04_read();
distance = sensor_time * .034 / 2;
sprintf(str_distance,"%lu", distance);
lcd_clear();
lcd_put_cur(1, 0);
lcd_send_string(str_distance);
sendDistanceStatus = HAL_UART_Transmit(&huart2, str_distance, sizeof(str_distance),
100);
if (sendDistanceStatus == HAL_OK) {
i++;
HAL_Delay(300);
}
}
HAL_Delay(1000);
} else { //STOP
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, RESET);
lcd_clear();
lcd_put_cur(0, 0);
lcd_send_string("STOP...");
}
}
Пожалуйста, помогите мне решить эту проблему. Заранее спасибо.