文章目录
- 文章介绍
- 效果图
- SerialPort.qml
- 代码v1
- 代码v2
- 代码v3
文章介绍
文章qml/c++:基础界面的“串口设置”逻辑1实现了
1、串口连接,连接成功的弹窗提示
2、读取数据。
本篇文章需要实现的功能是
1)接收数据后更新“已接收”的行数
效果图
SerialPort.qml
代码v1
- 效果v1
已接收行数显示不是依次递增 比如0,2,3,4,6
代码v2
- 改进点2个:
- v2效果图
- v2存在的问题
接收到的数据出现空行和单词不完整的原因可能与数据接收和处理的方式有关。串口通信中,数据通常是以字节流的形式接收的,不一定按照整行的形式接收。如果数据接收是异步的,那么在拼接数据时,可能会出现数据包被拆分的情况。 - 问题分析
数据接收不完整:
确保每次接收到的数据都是完整的一行。在处理数据时,可以检查是否接收到换行符(\n 或 \r),然后再处理整行数据。
缓冲区处理:
维护一个缓冲区,将接收到的字节先存入缓冲区,等到遇到换行符时,再将完整的一行数据从缓冲区中取出进行处理。
代码v3
- 解决办法:新增缓存区
buffer 用于暂存接收到的数据。当接收到新数据时,将其追加到 buffer 中,然后使用换行符分割数据。最后一个元素是未完成的行,将其保留在 buffer 中,其余的完整行则添加到 textEdit 中并更新行计数。
- 代码v3实现最终的效果