0
点赞
收藏
分享

微信扫一扫

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

止止_8fc8 2023-05-02 阅读 67


写了一个函数将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);

 }


举报

相关推荐

0 条评论