Qt5 QSerialPort 写入数据
Posted
技术标签:
【中文标题】Qt5 QSerialPort 写入数据【英文标题】:Qt5 QSerialPort write data 【发布时间】:2013-11-29 14:50:45 【问题描述】:如何在串行端口中写入数据,发送消息之间有延迟? 这是我的代码:
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);
当我调用此函数时,我的设备收到一条错误消息。
谢谢。
【问题讨论】:
【参考方案1】:2 个选项:
使用waitForBytesWritten
确保写入字节,然后使用简短的sleep
然而这会阻塞线程并阻塞gui
另一个是使用 QTimer 来触发另一个 slot 几次和一个字段来指示需要发送的内容
【讨论】:
【参考方案2】:看起来您正在尝试对一些步进电机控制器或类似的东西进行编程。 通常在此类控制器中,您应该等待控制器响应以验证命令是否已正确处理。
看起来你的代码设计很糟糕。将与此控制器相关的所有内容移动到具有一组插槽的单独类中,例如:starRotateLeftWithSpeed(double)
。如果您决定使用另一个答案中提出的waitForBytesWritten
之类的方法,代码会更干净,并且易于使用线程。
当然你应该更仔细地阅读控制器手册。
【讨论】:
以上是关于Qt5 QSerialPort 写入数据的主要内容,如果未能解决你的问题,请参考以下文章
如何知道 QSerialPort 何时准备好接收 Qt5 中的更多数据?