您的位置:首页 > 运维架构 > Linux

使用QSerialport读取串口数据并处理

2017-07-18 21:06 246 查看
写了一个函数将ASCII转换为int

int DataToInt(char data)

{

    int num = 0;

    if(data>='0'&&data<='9')

        num = data - 48;

    if(data>='a'&&data<='f')

        num = data - 87;

    return num;

}

buff = new QByteArray; 

void Serial::ReadData()

{

    QByteArray arr = port->readAll();   

    QByteArray array =arr.toHex();  //转为16进制

    buff->append(array);//一个串口传来的数据由两个16进制字符组成

    if(buff->length()<16)

    {

        return;

    }

    QString buffdata;

    buffdata.prepend(*buff);//QString中存放的是字符型

    if(buffdata[0]=='e'&&buffdata[1]=='e'&&buffdata[2]=='c'&&buffdata[3]=='c')

    {

        if(buff->at(8)==97)   //97=a   filter zhouqixiaoxi

        {

            buff->remove(0,buff->size());

            return;

        }

        if(buff->at(7)==53)//5 deascii shi 53   fliter motor2

        {

            buff->remove(0,buff->size());

            return;

        }

        if(buff->at(7)==57)//9 deascii shi 57     filter moter

        {

            buff->remove(0,buff->size());

            return;

        }

        if(buff->at(7)==97)//a deascii shi 97   filter shake

        {

            buff->remove(0,buff->size());

            return;

        }

        emit this->diliverSerial(array);

        int NodeSeq=buff->at(5)-48;

        int NodeID=buff->at(7)-48;

        int Command=buff->at(9)-48;

        qDebug()<<NodeSeq;

        qDebug()<<NodeID;

        qDebug()<<Command;

        if(NodeID==9)

        {

            buff->remove(0,buff->size());

            return;

        }

        if(NodeID==3)   //tempAndhum

        {

            float temph = DataToInt(buff->at(10))*16.0+DataToInt(buff->at(11));

            float templ = DataToInt(buff->at(12))*16+DataToInt(buff->at(13));

            float temp=((temph)*256+(templ))*0.01;

            QString Datatemp = QString("%1").arg(temp);

            float humh = DataToInt(buff->at(14))*16+DataToInt(buff->at(15));

            float huml = DataToInt(buff->at(16))*16+DataToInt(buff->at(17));

            float humi=((humh)*256+(huml))*0.01;

            QString Datahumi = QString("%1").arg(humi);

            /*

            float temph = (buff->at(10)-48)*16+(buff->at(11)-48);

            float templ = (buff->at(12)-48)*16+(buff->at(13)-48);

            float temp=((temph)*256+(templ))*0.01-100;

            QString Datatemp = QString("%1").arg(temp);

            float humh = (buff->at(14)-48)*16+(buff->at(15)-48);

            float huml = (buff->at(16)-48)*16+(buff->at(17)-48);

            float humi=((humh)*256+(huml))*0.01;

            QString Datahumi = QString("%1").arg(humi);

            */

            emit this->diliverTemp(Datatemp);

            emit this->diliverHumi(Datahumi);

            QString DatatempAndhumi=Datatemp+","+Datahumi;

            SensorInfo *info =new SensorInfo(NodeSeq,NodeID,Command,DatatempAndhumi);  // ba data zhuang string

            CreateJson(info);

            buff->remove(0,buff->size());

        }

        if(NodeID==4) //shake

        {

            float shake = (buff->at(11)-48);

            QString Datashake="no alarm";

            if(shake==1)

            {

                Datashake = "1";

                //ui->textEdit_smk->setText("alarm");****************

            }

            else{

                Datashake = "0";

                //ui->textEdit_smk->setText("no alarm");*************

            }

            emit this->diliverSmk(Datashake);

            //QByteArray ByteData=Data.toUtf8();

            SensorInfo *info =new SensorInfo(NodeSeq,NodeID,Command,Datashake);  // ba data zhuang string

            //qDebug("Temprature From Serial ---------"+ByteData);

            //emit DiliverSerial(ByteData);

            CreateJson(info);

            buff->remove(0,buff->size());

        }

    }

}

void Serial::CreateJson(SensorInfo *info)

{

    QJsonObject obj;

    obj.insert("NodeSep",info->getSeq());

    obj.insert("NodeID",info->getID());

    obj.insert("Command",info->getCmd());

    obj.insert("Data",info->getData());

    QJsonDocument doc;

    doc.setObject(obj);

    QByteArray arry = doc.toJson(); // zhuancheng JSON

    //qDebug(arry);

    emit this->SendData(arry);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt ubuntu linux ascii