【问题标题】:Qt ReadyRead and AVR devicesQt ReadyRead 和 AVR 设备
【发布时间】:2018-04-16 22:37:48
【问题描述】:

我使用 Qt 和 Arduino UNO 来构建数据采集系统。现在我想用 AVR ATmege32u4 微控制器将它迁移到 Qt。

请看下面的代码。我正在读取由 ReadyRead 信号触发的 Qt 传入的串行数据,然后将这些数据打印到 Qt 调试窗口。这适用于 Qt+UNO,但不适用于 Qt+32u4。我排除了 32u4 的任何问题(例如坏芯片),因为数据可以很好地打印到 Arduino IDE 中的串行端口监视器。

我的问题是:

(1) 为什么该程序适用于一个 AVR 设备而不适用于另一个?

(2) 如何使程序适用于 32u4 微控制器?

Arduino 代码(简化以突出问题):

void setup(){
  Serial.begin(115200);
  while(!Serial){}
}

void loop(){
  // wait for incoming serial data from Qt (code not shown)
  // record data
  // send data back.  In this example, send back some text: "abababab"
  for(unsigned int i=0;i<4;i++){
   Serial.write{0x61}; // "a"
   Serial.write{0x62}; // "b"
  }
}

相关Qt代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QDebug>
#include <QStringList>
#include <QtSerialPort> 
#include <QDataStream>

MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::MainWindow)
  {
    ui->setupUi(this);
    microcontroller = new QSerialPort(this);

    // initialize the serial port (baud rate, parity etc.)

connect(microcontroller, &QSerialPort::readyRead, this, &MainWindow::readData);

void MainWindow::readData(){

 serialData += microcontroller->readAll();
 qDebug() << serialData;

}

【问题讨论】:

  • 您使用的是哪种基于 32u4 的板?莱昂纳多?

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


【解决方案1】:

您不能两次打开同一个 COM 端口。如果它是由 Arduino IDE 打开的,它将无法在您的 Qt 应用程序上运行。

另外,您应该发布MCVE。如果您不向我们展示代码,就很难判断出了什么问题。

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多