使用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);
}
相關文章
- 使用QT-QSerialport打不開串列埠的原因QT串列埠
- java讀取大檔案並處理Java
- 串列埠資料抓取及串列埠通訊模擬串列埠
- 讀取mysq資料庫l資料,並使用dataview顯示資料庫View
- Excel上傳並讀取資料Excel
- php讀取xml資料庫欄位超長處理PHPXML資料庫
- STM32使用DMA傳送串列埠資料串列埠
- Linux下串列埠通訊詳解(下)讀寫串列埠及關閉串列埠Linux串列埠
- 在`Laravel`中使用`cursor`來查詢並處理資料 (輕鬆處理千萬級的資料)Laravel
- 在Laravel中使用cursor來查詢並處理資料 (輕鬆處理千萬級的資料)Laravel
- Pytorch資料讀取與預處理實現與探索PyTorch
- Python專案實踐:串列埠字串資料的讀取、分割與儲存到csv檔案Python串列埠字串
- QT串列埠助手(三):資料接收QT串列埠
- js讀取excel檔案,繪製echarts圖形---資料處理JSExcelEcharts
- 使用VB透過RFC連線並處理SAP資料例子
- putty能使用串列埠串列埠
- QT串列埠助手(四):資料傳送QT串列埠
- 資料預處理之 pandas 讀表
- Linux 驅動像微控制器一樣讀取一幀dmx512串列埠資料Linux串列埠
- 用R讀取PDF並進行資料探勘
- 使用Excel高效處理資料Excel
- 使用openpyxl處理表格資料
- 使用yaml檔案讀取資料YAML
- 關於並口,串列埠問題解決串列埠
- Python Cookie HTTP獲取cookie並處理PythonCookieHTTP
- 《Python資料處理》讀書筆記Python筆記
- C#獲取本地串列埠裝置C#串列埠
- Shell 引數的讀取和處理
- 使用 jQuery 讀取 Vue 元件的資料jQueryVue元件
- POI 使用SAX讀取大資料Excel大資料Excel
- 沒有真實串列埠裝置時使用"虛擬串列埠驅動"除錯你的串列埠程式碼串列埠除錯
- 醫學影像處理中的資料讀寫
- Python爬取豆瓣電影的短評資料並進行詞雲分析處理Python
- python 資料處理(字串擷取、()\[]\{}資料型別、{}字典資料取值)Python字串資料型別
- Python資料處理(二):處理 Excel 資料PythonExcel
- Python xlrd讀取excel異常處理PythonExcel
- 資料處理
- Python使用xlrd處理excel資料PythonExcel