注册 登录
编程论坛 QT论坛

qt5.14.2+dht22+arduino 串口传输实时采集数据

niefeng0429 发布于 2023-01-19 10:41, 2613 次点击
本人新手一枚,近期遇到一个问题,想请教高手解答, 我用arduino 连接dht22  采集实时温湿度数据,下位机已经做好了,自己做了一个串口通讯上位机 用来显示温湿度数据和波形图,现在问题是 能接收下位机返回来的实时温湿度数据,但是在上位机界面显示不完整, 比如说温度23.9 湿度60.1  在lineedit或lcdnumber 只显示3.9 或者湿度控件直接显示0  我也曾试图split分隔采集来的数据,但没成功, 请高手指教一二, 不胜感激 可附代码图
7 回复
#2
niefeng04292023-01-19 11:18
void Widget::AnalyzeData()
{//读取数据

    QByteArray recvData = myserial->readAll();//定义mytemp为串口读取的所有数据
    recvData.resize(1024);
    qDebug()<<"recvData:"<<recvData;

    if(!recvData.isEmpty())
        {//从dht22采集来的数据进行转换 由bytearray 转成int

        QString StrI1=recvData.toHex().mid(8,2);
        QString StrI2=recvData.toHex().mid(24,2);
        //.toHex()这一步很关键,没有这一步显示的是乱码
           int tem=StrI1.toInt(0,16);
           int hum=StrI2.toInt(0,16);
           ui->textBrowser->insertPlainText(recvData);
           ui->lab_Temp->setText(StrI1);//显示读取温度值
           ui->lab_Humi->setText(StrI2);//显示读取湿度值
           ui->tem_lcdNumber->display(tem);
           ui->hum_lcdNumber->display(hum);
           recvData.clear();
#3
niefeng04292023-01-19 11:27
void Widget::AnalyzeData()
{//读取数据

        QByteArray recvData;
        recvData = myserial->readAll();//定义mytemp为串口读取的所有数据     
        qDebug()<<"recvData:"<<recvData;

        if(!recvData.isEmpty())
        {//从dht22采集来的数据进行转换 由bytearray 转成float

            QString str;
            str = QString::fromLocal8Bit(recvData);
            QStringList list = str.split(",");

            QString str1 = str.mid(0,5);
            QString str2 = str.mid(6,5);

            float tem = str1.toFloat();//转成浮点型
            float hum = str2.toFloat();

           //在文本框和控件中显示温湿度值
            ui->textBrowser->insertPlainText(recvData);
            ui->tem_lcdNumber->display(tem);//显示读取温度值
            ui->hum_lcdNumber->display(hum);//显示读取湿度值



我尝试了另外一种方式,还是不行,不知道哪里出问题了? 还请高手指教
#4
niefeng04292023-01-19 11:30
因为下位机传输过来的数据是温湿度一起的 比如:23.9 50.8  ui->textBroser->insertPlainText(recvData) 这里来的数据没问题  就是在显示控件上显示的温湿度不对,
#5
niefeng04292023-01-19 11:32
只有本站会员才能查看附件,请 登录
#6
niefeng04292023-01-19 11:33
这个就是结果, 下面传输过来的温湿度 没问题,但是在显示控件上 温度25.6 少2  湿度值 干脆就是显示0  不知道为什么? 请高手指点
#7
_nullptr2023-02-06 15:04
这个事我遇到过  还是要转换一下 全部转成字符串传出来 qstring temp hump   
                       temp=m_temp=QString::number((float)m_tempdatabuf/10,'f',1);
                       humd=m_humd=QString("%1").arg((float)m_humdatabuf/10);    我例子里这样弄传出来就没事了  应该可以看明白了吧
1