Qt C ++ SerialPort не получает данные - PullRequest
0 голосов
/ 26 мая 2020

Я очень стараюсь решить эту проблему. Но никак не мог разобраться в чем проблема! В Qt, C ++ я попытался реализовать запись и чтение через последовательный порт. Он может отправлять данные только по последовательному каналу, но не получать их с другого конца. Я искал в Google и StackOverFlow, но не смог решить эту проблему. Я установил пару виртуальных COM-портов COM1 <--> COM2

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSerialPort>
#include <QDebug>

//QSerialPort *serial;

MainWindow::MainWindow(QWidget *parent)
 : QMainWindow(parent)
 , ui(new Ui::MainWindow)
{
 ui->setupUi(this);
 serial= new QSerialPort(this);
 serial->setPortName("COM1");
 serial->setBaudRate(QSerialPort::Baud9600);
 serial->setDataBits(QSerialPort::Data8);
 serial->setParity(QSerialPort::NoParity);
 serial->setStopBits(QSerialPort::OneStop);
 serial->setFlowControl(QSerialPort::NoFlowControl);
 //serial->clearError();
 //serial->setDataTerminalReady(false);
 //serial->clear();
// qDebug() << "serial->open(QIODevice::ReadWrite)";
 //serial->open(QIODevice::ReadWrite);
 if (serial->open(QIODevice::ReadWrite))
     {
          qDebug() << "Com port opened";
            // serial->setDataTerminalReady(false);
             serial->write("Hello");
     }
     else
     {
         qDebug() << "Not opened";
     }
  ui->label->setText("Waiting..");

 connect(serial,SIGNAL(readyRead()),this,SLOT(serialReceived()));
 connect(serial, SIGNAL(error(QSerialPort::SerialPortError)), this,SLOT(handleError(QSerialPort::SerialPortError)));
}

MainWindow::~MainWindow()
{
 delete ui;
 serial->close();
}

void MainWindow::serialReceived(){

//QString received = this->Read();
//qDebug() << "received data:" << received;

 QByteArray ba;
 ba=serial->readAll();
 ui->label->setText("Waiting..");
 ui->label->setText(serial->readAll());

 qDebug()<<ba;
 qDebug() << "bytes available:" << serial->bytesAvailable();

}

void MainWindow::handleError(QSerialPort::SerialPortError error)
{
qDebug()<<"Error:"<<error;//I added this line
if(error==QSerialPort::ResourceError)
{
qDebug()<<"serial->errorString())";
//closeSerialPort();
}
}

COM1 назначен в коде Qt, а COM2 открыт в последовательном мониторе.

Для проверки я написал код PythonQT, который работает нормально, но мое требование - c ++

1 Ответ

0 голосов
/ 29 мая 2020

Даже пример кода терминала, поставляемый с Qt Creator, не отправляет и не принимает данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...