0

我在尝试从 WIN7 上的 qt5 应用程序发送一个字符(即“R”)到连接到 Arduino 的 comport 时遇到了麻烦。我打算在 Arduino 上闪烁一个 LED,我的 arduino 部分工作正常。

这是我的qt代码:

#include <QTextStream>
#include <QCoreApplication>
#include <QtSerialPort/QSerialPortInfo>
#include <QSerialPort>
#include <iostream>
#include <QtCore>

QT_USE_NAMESPACE

using namespace std;
QSerialPort serial;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTextStream out(stdout);
    QList<QSerialPortInfo> serialPortInfoList = QSerialPortInfo::availablePorts();

    out << QObject::tr("Total number of ports available: ") << serialPortInfoList.count() << endl;


    foreach (const QSerialPortInfo &serialPortInfo, serialPortInfoList) {
        out << endl
            << QObject::tr("Port: ") << serialPortInfo.portName() << endl
            << QObject::tr("Location: ") << serialPortInfo.systemLocation() << endl
            << QObject::tr("Description: ") << serialPortInfo.description() << endl
            << QObject::tr("Manufacturer: ") << serialPortInfo.manufacturer() << endl
            << QObject::tr("Vendor Identifier: ") << (serialPortInfo.hasVendorIdentifier() ? QByteArray::number(serialPortInfo.vendorIdentifier(), 16) : QByteArray()) << endl
            << QObject::tr("Product Identifier: ") << (serialPortInfo.hasProductIdentifier() ? QByteArray::number(serialPortInfo.productIdentifier(), 16) : QByteArray()) << endl
            << QObject::tr("Busy: ") << (serialPortInfo.isBusy() ? QObject::tr("Yes") : QObject::tr("No")) << endl;
    }

    serial.setPortName("COM5");
    serial.open(QIODevice::ReadWrite);
    serial.setBaudRate(QSerialPort::Baud9600);
    serial.setDataBits(QSerialPort::Data8);
    serial.setParity(QSerialPort::NoParity);
    serial.setStopBits(QSerialPort::OneStop);
    serial.setFlowControl(QSerialPort::NoFlowControl);




        if(!serial.isOpen())
        {
          std::cout<<"port is not open"<<endl;
          //serial.open(QIODevice::ReadWrite);
        }

    if(serial.isWritable()==true)
    {
        std::cout<<"port writable..."<<endl;
    }



    QByteArray data("R");

    serial.write(data);
    serial.flush();
    std::cout<<"value sent!!! "<<std::endl;
    serial.close();

    return 0;
}

我的源代码由两部分组成,

1- serialportinfolist .... 工作得很好 2- 打开和写入数据... 运行代码时我没有遇到任何问题,显示屏显示的结果好像没有出错一样!

但是,当我运行此代码时,板上的 LED 没有打开。

我用 Arduino 串行监视器对此进行了测试,它打开但无法从 Qt 打开。

4

2 回答 2

0

Are you waiting for cr lf (0x0D 0x0A) in your arduino code?

QByteArray ba;
ba.resize(3);
ba[0] = 0x5c; //'R'
ba[1] = 0x0d;
ba[2] = 0x0a;

Or append it to your string with

QByteArray data("R\r\n");

Or

QByteArray data("R\n");
于 2014-01-25T01:46:34.817 回答
0

我想我找到了部分解决方案,但它仍然不完整。

当我第一次按调试时,qt 不会向 Arduino 发送任何信号,但是当我第二次按调试时,它的行为符合预期。

所以,这不是很奇怪,一个人必须运行它两次才能让它工作吗???

让我知道问题是否存在于其他地方,

任何帮助...

于 2014-02-01T00:57:35.113 回答