【技术】QT串口界面的实时显示

QT串口界面的实时显示

链接:
github上下载SerialPortQT

一、 qt串口界面实时显示遇到的问题

问题1:fatal error: QtGui/QApplication: No such file or directory compilation terminated.
将#include 改为#include 和#include
问题2:error: ‘setCodecForTr’ is not a member of ‘QTextCodec’
在这里插入图片描述
这个问题是由于QT版本不兼容的原因,由于QT5中去掉了QTextCodec,原来的**toAscii()函数在QT4中是有的,但是在QT5中没有,取而代之的是toLatin1()**函数,所以解决方案就是替换一下就可以了。
问题3: 对于动态更新大量数据的处理方式

void showWave::processEightData()
{
    int length = readData.length();
    for(int i=0;i < length;i++)
    {
        num[i] = ((int)readData[i]&255);
        qDebug()<<num[i]<<"-------8------";
    }

    readData = "";
    COLUMN = length;
}

二、python串口数据传输遇到的问题

问题1:在pc端接收到的树莓派发送过来的数据十六进制显示总为40结尾,是什么原因呢?
方案1:这个问题我首先考虑的是python和其他数据包的协议不同,但实际如果不相同是不可能解析出数据的,因此应该是树莓派python的环境下对数据处理不当,如果通信使用字符串较为合适,因此将float64的数据str(position)进行强制转换,其次就是ser.write函数的使用特殊性,通过串口写入ser.write(b’’),参数需要使用字节bytes类型,如果是str类型,则可以使用encode(‘utf-8’)的方式进行转换;
方案2对数据进行二进制(bin)和16进制(hex)转换前需要对float64类型的数据转换成int/str再进行其他类型的转换
例子:str_p = bin(int(position))
ser.write(str_p.encode(‘utf_8’))

三、Qt设计的PC端的数据

在确保串口无线通信设备可用的条件下进行以下测试
Step1:选择串口号,判断标准:根据是否可打开串口为配置端口合适的标准
Step2:选择串口波特率,默认9600,其他的因为是根据串口配置设置的默认项,因此可不用进行选择。

在串口助手中显示的数据为16进制,不能对其进行二次编程,本文使用的是QT5.8版本的软件,该软件默认波特率为9600,端口需要自行选择,其中本机串口使用的是com8,可以打开串口时表示串口链接成功,进而树莓派编写简单串口数据发送函数,将数据以二进制发送过来,其进行16进制转换,从树莓派发送过来的数据一共为12个,可根据数格式40结尾可知数据共传送个数,界面显示如下:
【技术】QT串口界面的实时显示_第1张图片

四、树莓派端的数据

根据串口传回上位机端的数据第二个和第三个是一致的,从树莓派python IDE环境下运行串口数据发送函数,并将结果输出打印,根据输出窗口可知,第二个和第三个的结果均为45.209度,因此该数据传输是正确的。

五、转换实验数据

检测树莓派中的数据默认类型,调用type()函数可知角度数据类型为float64,需要将数据转为字符串进行传输,实际在qt界面上的显示如下图所示:
【技术】QT串口界面的实时显示_第2张图片

为方便数据对比,将树莓派端的数据输出如下:

你可能感兴趣的:(声源定位)