使用Qt串口实时显示温湿度数据

之前用Qt做了一个简单的串口助手,前几天做了一个可以实时显示温湿度数据的串口应用,今天周末总结一下。
使用Qt串口实时显示温湿度数据_第1张图片
效果:
1、实现的效果如上图所示,可以实时显示温湿度以及系统的当前时间;
2、串口的波特率可选,其它设置项固定,数据位8、停止位1、检验及流控无;

测试:
1、我使用了两种方式进行测试,第一个是通过短接串口线的接收和发送,在软件中定时发送固定格式的数据帧进行测试,我测试了大概4个小时,系统没有问题;
2、第二个就是用单片机通过串口向终端发送固定格式的数据帧,这个我也测试了大概大概两个小时,系统没出现问题。

重点内容:
重点是对于接收的数据的处理,要约定好发送的数据的数据帧得格式,我使用的是简单的数据帧:6个字节构成一帧数据,如“ST125E”,第一个字符代表帧头,第二个代表数据类型(温度数据),第三个代表数据正负,第四和第五个代表数据,第六个为帧尾。无校验位。接收到数据后对这些数据进行进行判断处理,无错误时进行数据显示,刷新周期为1s。

//接收的数据处理
void Widget::readData()
{
QByteArray buf;
buf=serialport->readAll();
receiverBuf.append(buf);
qDebug()<<“receiverBuf:”<

if(receiverBuf.size()==6)
{
    //温度的数据
    if(receiverBuf.at(0)=='S'&&receiverBuf.at(1)=='T'&&receiverBuf.at(5)=='E')
    {
        if(receiverBuf.at(2)=='1')
        {
            //正温度值
            qDebug()<<"温度:+"<lcd_Temp->display(str);
        }
        else if(receiverBuf.at(2)=='0')
        {
            //负温度值
            qDebug()<<"温度:-"<lcd_Temp->display(str);
        }
        else
        {
            //错误处理
            qDebug()<<"温度数据错误!";
        }
        //清空缓存
        receiverBuf.clear();
    }
    //湿度的数据
    else if(receiverBuf.at(0)=='S'&&receiverBuf.at(1)=='H'&&receiverBuf.at(5)=='E')
    {
        if(receiverBuf.at(2)=='1')
        {
            //正湿度值
            qDebug()<<"湿度:"<lcd_humi->display(str);
        }
        else
        {
            //错误处理
            qDebug()<<"湿度数据错误";
        }
        //清空缓存
        receiverBuf.clear();
    }
    else
    {
        //清空缓存
        receiverBuf.clear();
    }
}
if(receiverBuf.size()>6)
{
    //数据错误
    qDebug()<<"数据格式错误";
}

}

//定时器自动更新发送
void Widget::timeUpdate()
{

sendCounter++;
if(sendCounter>10)
{
    sendCounter=0;
}
else
{
        if(sendCounter%3==0)
        {
            serialport->write("ST125E");
        }
        else if(sendCounter%3==1)
        {
            serialport->write("ST020E");
        }
        else if(sendCounter==2)
        {
            serialport->write("SH150E");
        }
}

QString str;
str=dt->currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
qDebug()<<"DateTime:"<lcd_dt->display(str);

}

大概就这么多,之后尝试使用绘制实时温湿度曲线。

你可能感兴趣的:(QT)