2013-07-29 68 views
0

我正在使用Window 7 x64 問題在於我用Arduino發送PC信息,並且在讀取端口時,我收到Arduino發送的奇怪的神器(0000000)PC讀取(0000 + 000)或類似的東西(00000 + 00) - (0 + 000000)等等。qextserialport奇怪的讀

對於一個例子,我將顯示的屏幕截圖

enter image description here

enter image description here

打開端口

bool MainWindow::openPort() 
{ 

    QString strPort = LineConnect->currentText(); 
    port = new QextSerialPort(strPort, QextSerialPort::EventDriven); 

    if (port->open(QIODevice::ReadWrite | QIODevice::Unbuffered) == true) { 


     port->setBaudRate(BAUD9600); 
     port->setDataBits(DATA_8); 
     port->setParity(PAR_NONE); 
     port->setStopBits(STOP_1); 
     port->setFlowControl(FLOW_OFF); 
     port->setTimeout(100); 
     port->waitForReadyRead(10); 
     port->open(QIODevice::ReadWrite | QIODevice::Unbuffered); 
     connect(port,SIGNAL(readyRead()), this, SLOT(onReadyRead())); 
     INFO_conn->append("port "+ port->portName() + " opened.."); 
     INFO_conn->append("port " + port->portName() + " reading.."); 

     return true; 
    } else { 
     INFO_conn->append("port " + port->portName() + " error connection.."); 
    } 
    return false; 
} 

讀數據

對於PC

void setup() 
{ 
    Serial.begin(9600); 

    ..... 
} 
void loop() 
{ 
    Serial.print(K38); 
    Serial.print(K40); 
    Serial.print(K42); 
    Serial.print(K44); 
    Serial.print(K46); 
    Serial.print(K48); 
    Serial.print(K50); 

    or 

    Serial.print("0000000"); // result same 

} 

我不能什麼可以有一個問題理解

void MainWindow::onReadyRead() 
{ 
     /*first option read data*/ 
     QByteArray msg = port->readAll(); 
     int size = msg.size(); 
     QString data = "Data: " + msg + " size: " + QString::number(size); 
     INFO_conn->append(data); 

     /*second option read data*/ 
    // char data[1024]; 
    // QTextStream out(stdout); 

    // out << "data received: "; 
    // int bytesRead = port->read(data, 1024); 
    // data[bytesRead] = '\0'; 
    // out << data << " (" << bytesRead << " bytes)" << endl; 
    // //QString messRead = "data received: " + data +" "+ bytesRead + " bytes"; 
    // INFO_conn->append(data); 

} 

發送數據Arduino的,都試過了。 來自QexSerialPort庫的示例讀得最多。 需要幫助。感謝您的幫助。

+0

你應該考慮使用QtSerialPort。我無法提及在新代碼中使用QextSerialPort的任何原因。 – lpapp

回答

0

我建議使用串行終端應用程序(Putty,TeraTerm,超級終端)來調試您的串口代碼。將一個串行終端應用程序連接到Arduino,看看是否得到你期望的輸出。還要將它連接到你的Qt應用程序,看看你是否可以發送文本到你的Qt應用程序並獲得理智的輸出。您應該能夠更好地分辨出問題出在Arduino上還是PC上。

+0

我根據你的建議到達並收到以下結果 1)PUTTY在輸出上連接arduino端口一切正常 (http://rghost.ru/47772883.view) 2)連接有點困難到Qt應用程序,因此有必要創建2個虛擬端口並使用它們:1在輸入端的輸出2上。在輸出我收到 http://rghost.ru/47772929.view 根據總我不知道可能會有什麼問題。可能是任何時間不正確,可能不正確我讀出數據(雖然它是非常奇怪的,在圖書館讀取的例子) – INTJOGE

+0

我想我更好地理解你的問題。如果您試圖獲得每次收到的相同的消息長度。您可以在Arduino發送數據後添加一段延遲,讓PC等待短時間的消息。另一種方法是在Arduino輸出中添加一個分界符,如換行符,然後在PC上一次處理一行數據。 –

+0

當然,我試圖把時間延遲arduino到5000ms結果簡單地改變,我在頂部(00-00000)...()寫的範圍也表現出大致週期性。目前尚不清楚我是否需​​要在實時數據中讀出爲什麼要延遲一段時間。 至於選擇使DA的分隔符是很好的選擇解決這個問題,我有一個功能,但它不是一個解決方案和欺騙。 在本週結束時或下一次開始時,將有機會詢問知道這個問題的人比我更多,可能會找到答案。 – INTJOGE