日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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读取串口数据并处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。