qserialport不会向arduino发送char

时间:2014-01-25 01:37:04

标签: arduino-ide

我在尝试从WIN7上的qt5应用程序发送一个字符(即“R”)到连接到Arduino的comport时遇到了麻烦。 我打算在Arduino上眨眼,我的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打开。

2 个答案:

答案 0 :(得分:0)

您是否正在等待arduino代码中的cr lf(0x0D 0x0A)?

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

或者使用

将其附加到您的字符串中
QByteArray data("R\r\n");

或者

QByteArray data("R\n");

答案 1 :(得分:0)

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

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

所以,是不是很奇怪,必须运行它两次以使其工作?

如果问题存在于其他地方,请告诉我,

任何帮助......