使用QSerialport读取串口数据并处理
生活随笔
收集整理的這篇文章主要介紹了
使用QSerialport读取串口数据并处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
寫了一個函數將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);
} 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的使用QSerialport读取串口数据并处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 某社交 App 涉黄被下架,真相令人窒息
- 下一篇: 同样是卖票,为啥阿里卖电影票就不卡?技术