【问题标题】:qextserialport strange readqextserialport 奇怪的读取
【发布时间】:2013-07-29 06:47:11
【问题描述】:

我使用的是 Window 7 x64 问题在于我在 PC 信息上使用 Arduino 发送,并且在读取端口时,我收到 Arduino send(0000000) PC 读取 (0000+000) 或类似的东西 (00000+00) - (0+000000) 和以此类推。

例如,我将显示一个屏幕截图

打开端口

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;
}

读取数据

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);

}

为 PC 发送数据 arduino

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

}

我不明白可能有什么问题,尝试了一切。 QexSerialPort 库中的示例读得太多。 需要帮助。感谢您的帮助。

【问题讨论】:

  • 您应该考虑使用 QtSerialPort。这些天我无法提及在新代码中使用 QextSerialPort 的任何原因。

标签: c++ qt serial-port arduino qextserialport


【解决方案1】:

我建议使用串行终端应用程序(PuttyTeraTerm、超级终端)调试您的串行端口代码。将串行终端应用程序连接到 Arduino 并查看是否获得您期望的输出。还将它连接到您的 Qt 应用程序,看看您是否可以将文本发送到您的 Qt 应用程序并获得合理的输出。您应该能够更好地判断问题出在 Arduino 上还是 PC 上。

【讨论】:

  • 我根据您的建议到达并收到以下结果 1) PUTTY 在输出上连接 arduino 端口一切正常 (rghost.ru/47772883.view) 2) 因此连接到 Qt 应用程序有点困难有必要创建 2 个虚拟端口并使用它们:1 在输出上 2 在输入上。根据我的总数,我收到rghost.ru/47772929.view 的输出,不知道可能有什么问题。可能有任何时间错误,可能我读出的数据不正确(尽管它很奇怪,因为库中的示例读取为)
  • 我想我更能理解您的问题。如果您尝试每次都收到相同的消息长度。您可以在 Arduino 发送数据后添加延迟,让 PC 等待消息一小段时间。另一种选择是在 Arduino 输出中放置一个分隔符,如换行符,然后在 PC 上一次处理一行数据。
  • 是的,我当然尝试将 arduino 上的时间延迟设置为 5000 毫秒,结果只是在我写在顶部 (00-00000) 中的那个范围内发生了变化......()也表现得近似周期性。并且不清楚我是否需​​要读取实时数据,为什么我要进行时间延迟。至于制作 da 分隔符的选项,这是解决这个问题的好选择,我有一个功能可以做到,但它不是解决方案和欺骗。在本周末或关注之初,将有机会询问比我更了解此主题的人,可能会找到答复。
猜你喜欢
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2010-09-29
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-07
相关资源
最近更新 更多