作者MOONY135 (談無慾)
看板C_and_CPP
標題[問題] QSerialPort接受數據問題
時間Wed Apr 19 15:40:50 2017
開發平台(Platform): (Ex: Win10, Linux, ...)
win7
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
vs2015
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
qt 5.7
問題(Question):
http://codepad.org/lpy6REnh
以上是我的code
我想對usb的東西送指令
使用的是
UART to USB
我用QSerialPort的SIGNAL(readyRead())去監聽回傳回來的東西
他可能分段傳回來 但我需要完整的一段 才有辦法解析
回傳可能長這樣
"\x06"
"\x23"
"\x4\x12\x85"
"\x83\x86\xB0\x83\xEA"
但我需要知道他甚麼時候結束 才能作解析
"\x06\x23\x4\x12\x85\x83\x86\xB0\x83\xEA" <-再把這串拿去做解析
開頭跟結尾理論上會是固定的 \x06開頭 \xEA結尾
目前還是用btn去控制 但之後要用timer去掃SnedMsg()這個slot
請問有推薦的做法嗎
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.242.6.98
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1492587653.A.0A4.html
1F:→ uranusjr: 標準做法是自己做一層負責收資料的 controller, 收到 04/19 16:43
2F:→ uranusjr: 0xea 的時候發一個 signal, 其他人接這個 signal 就好 04/19 16:43
所以是讀到的字串用QString AddStr
把他接起來 然後掃最後一位數是否為 \xEA
如果是的話 把這段往上傳 然後然後把AddStr清除?
void Meter::portToRead() {//資料接收、打印
QString Rx;
QString AddStr;
Rx = serial->readAll();
AddStr += Rx;
if (AddStr.right(4) == \xEa){
emit message(AddStr);
AddStr = "";
}
}
大概改成這種感覺?
※ 編輯: MOONY135 (210.242.6.98), 04/19/2017 16:52:42
3F:→ uranusjr: 對概念上是這樣, 上面這段程式有 bug 你之後自己會發現 04/19 18:06
我知道 QString Rx; 要弄成全域變數
不過好像還是少了點甚麼
※ 編輯: MOONY135 (36.225.55.127), 04/19/2017 20:28:52