我在尝试从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打开。
答案 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时,它会按预期运行。
所以,是不是很奇怪,必须运行它两次以使其工作?
如果问题存在于其他地方,请告诉我,
任何帮助......