Solved Regarding Projector Programming using QT
-
@Prath said in Regarding Projector Programming using QT:
connect(console, SIGNAL(getData(QByteArray)), this, SLOT(writeData(QByteArray)));
I would at least verify that whatever console
getData()
is it does return the exact right string to send on to the port. E.g. I don't know if waits till you type a newline or sends characters immediately, and/or whether it sends that newline and that matters.At this point, how have you been able to verify your command works in principle outside of anything Qt?
-
We are using a projector application to send command to the projector.
-
However, I am not able to write anythinh in the window created after running the Qt programme
-
Hi,
Write what ?
Write where ?
In what window ? -
Hey @SGaist , after running the above programme , a GUI pops out. We have to send a command to the projector using the GUI. However, I couldn't send any commnad as nothing could be written on the GUI window.
-
@Prath said in Regarding Projector Programming using QT:
after running the above programme
which program?
The Serial Terminal example I suggested before?Have you tested managing the projector using any other terminal application? Just to validate it works fine...
-
Yes. @Pablo-J-Rogina . I am connecting the projector to Quectel QCOM application. Now I want to skip that application and create my customised application to control the projector.
I wrote a programme based on the guidelines of Quectel to switch off the projector. Following is the code. Even I used the QSerialPort code. But the projector couldn't switch off. However using the command prompt of the Quectel QCOM application, I could control the projector.
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include<QSerialPort>
#include<string>
#include<QtGui>
#include <QMessageBox>using namespace std;
QSerialPort *serial;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::on_pushButton_clicked()
{
QMessageBox::information(this,"Title here","Hello World");
serial = new QSerialPort(this);
serial->setPortName("COM3");
serial->setBaudRate(QSerialPort::Baud115200,QSerialPort::AllDirections);
serial->setDataBits(QSerialPort::Data8);
serial->setFlowControl(QSerialPort::NoFlowControl);
serial->setStopBits(QSerialPort::OneStop);
serial->setParity(QSerialPort::NoParity);if(!serial->open(QIODevice::ReadWrite)) { qDebug()<<"error: can't open com port"; } QString command = "WT+LEDE=0\n"; QByteArray x = command.toLocal8Bit(); serial->write(x);
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{
Q_OBJECTpublic:
MainWindow(QWidget *parent = nullptr);
~MainWindow();private slots:
void on_pushButton_clicked();private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H#-------------------------------------------------
Project created by QtCreator 2019-11-02T10:55:21
#-------------------------------------------------
QT += core gui serialport
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = GUISerialPort
TEMPLATE = appSOURCES += main.cpp
mainwindow.cppHEADERS += mainwindow.h
FORMS += mainwindow.ui
-
@Prath said in Regarding Projector Programming using QT:
if(!serial->open(QIODevice::ReadWrite))
Does open() succeed?
-
@jsulm Yes. Open succeeded. But still, the projector could not read the commands which I am sending through serial port.
-
@Prath You should check what write() returns and connect a slot to https://doc.qt.io/qt-5/qserialport.html#errorOccurred to see whether you get any errors.
-
@jsulm Could you please help me with the syntax for checking the error. I am completely new in using this.
-
@Prath You know how to connect a slot to a signal?
https://doc.qt.io/qt-5/signalsandslots.html -
Yeah @jsulm . We have to connect this signal [signal]void QSerialPort::errorOccurred(QSerialPort::SerialPortError error) to the slot right?
Is this correct?
void MainWindow::errorReport(QSerialPort::SerialPortError error)
{
if(error!=0)
qDebug()<<"ERROR:"<<endl<<error; // nothing printed
}connect(this->Serial,SIGNAL(error(QSerialPort::SerialPortError)),this,SLOT(errorReport(QSerialPort::SerialPortError)));
-
@Prath said in Regarding Projector Programming using QT:
Is this correct?
Signal is https://doc.qt.io/qt-5/qserialport.html#errorOccurred not error. Just check the documentation.
-
I think it is correct @jsulm. We are catching the signal using the slot and then displaying the signal.
-
@Prath
You wroteconnect(this->Serial,SIGNAL(error(QSerialPort::SerialPortError)),this,SLOT(errorReport(QSerialPort::SerialPortError)));
Where you have
SIGNAL(error(QSerialPort::SerialPortError))
@jsulm is expectingSIGNAL(errorOccurred(QSerialPort::SerialPortError))
. If what you have works, we do not understand how.If you are writing new code and would change over to the new signal/slot syntax you would presumably receive a compile-time error.
-
Sorry for the delay guys. I tried again with the code and couldn't retrieve anything from the serial port regarding the errror.
I got the attached error:-
-
Your MainWindow class does not have such a signal, it's one from the QSerialPort.
-
Didnt get you @SGaist .
Could you please help me with the syntax -
When I click on the push button the function on_pushButton_clicked is called and then I call the Qserialport to check the error. I think the code is written correctly.
What's your take?