Qserialport does not send a char to arduino



  • I'm having a trouble in trying to send a char (i.e. "R") from my qt5 application on WIN7 to comport which is connected to an Arduino. I intend to blink a led on Arduino and my arduino part works OK.

    Here is my qt code:

    @#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;
    

    }@

    My source code consists of two parts,

    1- serialportinfolist .... which works just fine 2- opening and writing data... I get no issue when running the code and the display shows the result as if nothing has gone wrong!

    HOWEVER, the led on the board does not turn on when I run this code.

    I test this with Arduino Serial Monitor and it turns on but cant turn on from Qt.



  • Are you sure that the data is not transmitted? Maybe you have incompatible signals. Than look at something like this (http://en.wikipedia.org/wiki/MAX232)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.