我已经将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;
}
答案 0 :(得分:0)
您无法两次打开相同的COM端口。如果它是由Arduino IDE打开的,它将无法在您的Qt应用程序上运行。
另外,您应该发布MCVE。如果你没有向我们展示代码,很难说出什么可能是错的。