1

如何在串行端口中写入数据,发送消息之间有延迟?这是我的代码:

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);

    }
}

当我调用此函数时,我的设备会收到一条错误消息。

谢谢你。

4

2 回答 2

1

2个选项:

  • 用于waitForBytesWritten确保写入字节,然后短sleep

    但是这会阻塞线程并阻塞 gui

  • 另一个是使用 QTimer 触发另一个插槽几次和一个字段,该字段将指示需要发送的内容

于 2013-11-29T15:04:09.473 回答
0

看起来您正在尝试对一些步进电机控制器或类似的东西进行编程。通常在此类控制器中,您应该等待控制器响应以验证命令是否已正确处理。

看起来你的代码设计很糟糕。将与此控制器相关的所有内容移动到具有一组插槽的单独类中,例如:starRotateLeftWithSpeed(double). waitForBytesWritten如果您决定使用另一个答案中提出的方法,代码会更干净,并且很容易使用线程。

当然,您应该更仔细地阅读控制器手册。

于 2013-11-29T15:13:21.243 回答