2013-07-29 72 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