2013-11-29 4 views
1

Как я могу записывать данные в последовательный порт с задержкой между сообщениями отправки? Это мой код:Qt5 QSerialPort написать данные

void MainWindow::on_pushButton_Done_clicked() 
{ 
    if(sport->isOpen()){ 
     sport->clear(); 
     QString cmd = Phase+Mode; 

     //Write Stop 
     sport->write("stop!", 5); 

     //Write Mode 
     sport->write(cmd.toStdString().c_str(), cmd.toStdString().length()); 

     //Write Speed 
     sport->write(Speed.toStdString().c_str(), Speed.toStdString().length()); 

     //Write Direction 
     sport->write(Direction.toStdString().c_str(), Direction.toStdString().length()); 

     //Run 
     sport->write("start!", 6); 

    } 
} 

Мое устройство получает сообщение об ошибке, когда я называю эту функцию.

спасибо.

+0

Какая ошибка? – usethedeathstar

ответ

1

2 варианта:

  • использование waitForBytesWritten для обеспечения байты записываются и затем короткий sleep

    однако это будет блокировать поток и блокировать графического интерфейса пользователя

  • в другой использует QTimer для запуска другого слота несколько раз и поля, которое укажет, что нужно отправить

0

Похоже, вы пытаетесь запрограммировать какой-либо контроллер шагового двигателя или что-то подобное. Обычно в таких контроллерах вы должны ждать ответа контроллера, чтобы проверить правильность обработки команды.

Похоже, что ваш дизайн кода очень плохой. Переместите все, что связано с этим контроллером, чтобы разделить класс, у которого есть набор слотов, что-то вроде: starRotateLeftWithSpeed(double). Код будет чище, и будет легко использовать поток, если вы решите использовать такие методы, как waitForBytesWritten, предложенные в другом ответе.

Определенно вы должны внимательно прочитать руководство по контроллеру.

Смежные вопросы