无法使用 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");
main.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 DataFrame 写入数据库