无法使用 qtserial 将数据写入 Arduino

Posted

技术标签:

【中文标题】无法使用 qtserial 将数据写入 Arduino【英文标题】:Not able to write data to Arduino using qtserial 【发布时间】:2016-02-09 12:34:55 【问题描述】:

我对 qt 编程相当陌生。我无法向 Arduino 发送/写入数据。

预期从 Arduino 读取数据。

我正在尝试在Serial.available() > 0 时打开 pin13 的 LED。当我使用 Arduino 串行监视器发送数据时,它可以正常工作。 但是我不能使用 qt-serial 来做同样的事情。我没有收到任何错误消息。

应该采取什么方法来调试此类问题?

serialCom.h

#ifndef SERIALCOM_H
#define SERIALCOM_H

#include <QObject>
#include <QSerialPort>

class SerialCom: public QObject

    Q_OBJECT
public:
    SerialCom(QObject *parent = 0);
    ~SerialCom();
    void openSerialPort();
    void closeSerialPort();
    void writeData(const QByteArray &data);    
public slots:
    void handleError(QSerialPort::SerialPortError error);
    void readData();
private:
    QSerialPort *serial;
;

#endif // SERIALCOM_H

serialCom.cpp

#include "serialcom.h"
#include <QDebug>
#include <QSerialPortInfo>

SerialCom::SerialCom(QObject *parent):
    QObject(parent)

    serial = new QSerialPort(this);

    connect(serial, SIGNAL(error(QSerialPort::SerialPortError)), this,
            SLOT(handleError(QSerialPort::SerialPortError)));
    connect(serial, SIGNAL(readyRead()), this, SLOT(readData()));


SerialCom::~SerialCom()




void SerialCom::openSerialPort()

    QSerialPortInfo portToUse;
    foreach (const QSerialPortInfo &port, QSerialPortInfo::availablePorts()) 

        if(port.isNull() || !port.isValid())
        
            qDebug() << "port is not valid:" << port.portName();
            return;
        
        if(!port.isBusy() && port.manufacturer().contains("Arduino"))
            portToUse = port;
            qDebug() << tr("Port: %1 || manufacurer: %2").arg(port.portName()).arg(port.manufacturer());
         else 
            qDebug() << "either port is busy or its not arduino";
        
    //forEach

    serial->setPortName(portToUse.portName());
    serial->setBaudRate(QSerialPort::Baud9600);
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);
    serial->setFlowControl(QSerialPort::NoFlowControl);
    if (serial->open(QIODevice::ReadWrite)) 
        qDebug() << "Connected to" << portToUse.description() << "on" << portToUse.portName();
     else 
        qCritical() << "Serial Port error:" << serial->errorString();

        qDebug() << tr("Open error");
    


void SerialCom::writeData(const QByteArray &data)

    if(serial->isOpen() && serial->isWritable())
        serial->write(data);
        serial->flush();
        qDebug() << "Writing: " << data;
    else
        qDebug() << "port not ready to write:" << serial->isWritable();
    


void SerialCom::readData()

    QByteArray data = serial->readAll();
    qDebug() << "UART:" << data;


void SerialCom::handleError(QSerialPort::SerialPortError error)

    qDebug() << error;


void SerialCom::closeSerialPort()

    serial->close();
    qDebug() << tr("Disconnected");

ma​​in.cpp

#include <QCoreApplication>
#include "serialcom.h"

int main(int argc, char *argv[])

    QCoreApplication a(argc, argv);
    SerialCom serialCom;

    //open port
    serialCom.openSerialPort();


    //make some stupid data to write to the serial port for testing
    const QByteArray stupid_data = "Hello World";


    //write @stupid_data to serial port
    serialCom.writeData(stupid_data);

    //closing port
//    serialCom.closeSerialPort();

    return a.exec();

simpleSerialCom.pro

QT += core serialport
QT -= gui

TARGET = simpleSerialCom
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp \
    serialcom.cpp

HEADERS += \
    serialcom.h

【问题讨论】:

【参考方案1】:

我在 github 上有两个相关的 Qt 项目:

https://github.com/peteristhegreat/qt-serialport-arduino

https://github.com/peteristhegreat/qt-serial-port-terminal

看看你是否可以让其中任何一个工作,然后比较它在那里的完成情况,以及你是如何做到的。

希望对您有所帮助。

【讨论】:

其实我用你的代码有参考开始写我的代码。谢谢 。我会尝试运行你的代码并测试

以上是关于无法使用 qtserial 将数据写入 Arduino的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 jdbc 将 spark 数据集写入数据库

我无法使用 jdbc 将 Spark DataFrame 写入数据库

无法使用 Swift 4 将数据写入 Firebase 实时数据库

无法通过 Unity 将数据写入 Firebase 数据库

无法将大量数据写入流

无法使用 Android 将数据写入 Firebase 数据库时如何获取错误消息