How to send the Data from Qt App to Arduino by serial communication
-
I have tried to send the data from Qt app to Arduino and i want to display the Received data in the serial monitor (Arduin IDE)
In Qt , i have develop some code to sending the data stored in the text file ,
THIS IS THE CODE..void MainWindow::on_pushButton_clicked() { serial = new QSerialPort (this) ; serial->setPortName(ui->comboBox->currentText()); serial->setBaudRate (QSerialPort::Baud9600); serial->setDataBits(QSerialPort::Data8); serial->setParity (QSerialPort::NoParity); serial->setStopBits (QSerialPort::OneStop); serial->setFlowControl(QSerialPort::NoFlowControl); serial->open(QIODevice::ReadWrite); connect(serial,SIGNAL(readyRead()),this, SLOT (serialReceived())); ui->progressBar->setValue(100); // ui->receive->clear(); } void MainWindow::checkAndSendData() { if(!m_lines.isEmpty()){ QByteArray baToSend = m_lines.takeFirst().toUtf8(); serial->write(baToSend); ui->aknowmnt->setText("Sent Message -->" + QString(baToSend) + "\n"); } else { ui->aknowmnt->setText("Receiving "); } } void MainWindow ::on_send_clicked() { line = ui->sender->toPlainText(); QString txt1 = ui->receive->toPlainText(); /*QString*/ txt3 = ui->aknowmnt->toPlainText(); if(m_lines.isEmpty()){ QFile inputFile(QString("/home/adx-soft1/Shankar/serial/myfile1.txt")); inputFile.open(QIODevice::ReadOnly); if (!inputFile.isOpen()) return; QTextStream stream(&inputFile); while(!stream.atEnd()){ QString line = stream.readLine(); m_lines.append(line + QString("\r\n")); } } checkAndSendData(); }
And i have develop the code in Aurdino IDE also ,
int incomingByte = 0; // for incoming serial data void setup() { Serial.begin(9600); // opens serial port, sets data rate to 9600 bps } void loop() { // reply only when you receive data: if (Serial.available() > 0) { // read the incoming byte: incomingByte = Serial.read(); // say what you got: Serial.print("I received: "); Serial.println(incomingByte, DEC); } }
If i Clicked the send button .. I am not able to see the data Received in Arduino . And i want to show the Received data in the Serial monitor , And i am new to this topic (ARDUINO-SERIAL-PORT-COMMUNICATION-QT)
I think I need to modify the Aurdino IDE Code ,
Please say me some suggestion to read the data from qt App in Arduino//Finally
With the knowldge of @mrjjI have solved this issue ,
𝐭𝐡𝐚𝐭 𝐢𝐭𝐬 𝐧𝐨𝐭 𝐡𝐨𝐰 𝐢𝐭 𝐰𝐨𝐫𝐤𝐬. 𝐈𝐓 𝐜𝐚𝐧 𝐣𝐮𝐬𝐭 𝐬𝐡𝐨𝐰 𝐰𝐡𝐚𝐭 𝐜𝐨𝐦𝐞𝐬 𝐟𝐫𝐨𝐦 𝐭𝐡𝐞 𝐀𝐑𝐃 𝐛𝐨𝐚𝐫𝐝. 𝐥𝐢𝐤𝐞 𝐚 𝐝𝐞𝐛𝐮𝐠𝐠𝐢𝐧𝐠 𝐜𝐨𝐧𝐬𝐨𝐥𝐞.𝐬𝐨 𝐢𝐟 𝐲𝐨𝐮 𝐨𝐩𝐞𝐧 𝐜𝐨𝐦𝐩𝐨𝐫𝐭 𝐰𝐢𝐭𝐡 𝐢𝐭 𝐟𝐢𝐫𝐬𝐭. 𝐭𝐡𝐞𝐧 𝐐𝐭 𝐩𝐫𝐨𝐠𝐫𝐚𝐦 𝐰𝐢𝐥𝐥 𝐠𝐞𝐭 𝐩𝐞𝐫𝐦𝐢𝐬𝐢𝐬𝐨𝐧 𝐞𝐫𝐫𝐨𝐫
𝐬𝐨 𝐢𝐭 𝐰𝐨𝐧𝐭 𝐬𝐡𝐨𝐰 𝐭𝐡𝐞𝐫𝐞 𝐰𝐡𝐚𝐭 𝐐𝐭 𝐬𝐞𝐧𝐝𝐬. 𝐨𝐧𝐥𝐲 𝐰𝐡𝐚𝐭 𝐛𝐨𝐚𝐫𝐝 𝐬𝐞𝐧𝐝𝐬
𝐡𝐭𝐭𝐩𝐬://𝐰𝐰𝐰.𝐢𝐧𝐬𝐭𝐫𝐮𝐜𝐭𝐚𝐛𝐥𝐞𝐬.𝐜𝐨𝐦/𝐢𝐝/𝐇𝐎𝐖-𝐓𝐎-𝐮𝐬𝐞-𝐭𝐡𝐞-𝐀𝐑𝐃𝐔𝐈𝐍𝐎-𝐒𝐄𝐑𝐈𝐀𝐋-𝐌𝐎𝐍𝐈𝐓𝐎𝐑/
𝐬𝐨 𝐮 𝐜𝐚𝐧𝐭 𝐮𝐬𝐞 𝐬𝐞𝐫𝐢𝐚𝐥 𝐦𝐨𝐧𝐢𝐭𝐨𝐫 𝐚𝐭 𝐬𝐚𝐦𝐞 𝐭𝐢𝐦𝐞 𝐚𝐬 𝐭𝐡𝐞 𝐐𝐭 𝐩𝐫𝐨𝐠𝐫𝐚𝐦
-
Hi
You should add check to theserial->open(QIODevice::ReadWrite);
to see if it fails.
It might not open at all and hence nothing will be seen on the board.
-
@mrjj Yes i checked in Qt App , by qDebug() its print in qt app and the data is getting in the function
Edited codevoid MainWindow ::on_send_clicked() { serial->open(QIODevice::ReadWrite); qDebug () << baToSend ; // Here i have checked in Qt line = ui->sender->toPlainText(); QString txt1 = ui->receive->toPlainText(); /*QString*/ txt3 = ui->aknowmnt->toPlainText(); if(m_lines.isEmpty()){ QFile inputFile(QString("/home/adx-soft1/Shankar/serial/myfile1.txt")); inputFile.open(QIODevice::ReadOnly); if (!inputFile.isOpen()) return; QTextStream stream(&inputFile); while(!stream.atEnd()){ QString line = stream.readLine(); m_lines.append(line + QString("\r\n")); } } checkAndSendData(); }
But In Arduino I did not get the data received .. @mrjj
-
@sankarapandiyan
You still have not shown code which checks the result fromserial->open(QIODevice::ReadWrite);
. Could you please start by doing that at least. This further applies to other code of yours, e.g.serial->write(baToSend);
. If you expect a solution to your issues you should start by introducing the necessary error checking code wherever possible. -
@sankarapandiyan hi, I also used arduino and Qt by serial communication. I just followed this video series steps This one was very helpful to me
-
@sankarapandiyan He is also sending texts and numbers to Arduino :). He is controlling arduino by sending letters, and numbers. Thats why I thought maybe helpfull for you. You can also send data to arduino only by using C++. But using Qt makes it easy.
-
-
@JonB said in How to send the Data from Qt App to Arduino by serial communication:
You still have not shown code which checks the result from serial->open(QIODevice::ReadWrite);.
YEs i have shown in above reply
-
@sankarapandiyan
You cannot expect people to help if you show output which simply does not correspond to anywhere in the code you have shown, can you? For example, you have a screenshot showing output where the code you have shown simply does not include any such output lines.... -
@JonB said in How to send the Data from Qt App to Arduino by serial communication:
you have a screenshot showing output where the code you have shown simply does not include any such output lines..
hi, the 2nd line in his on_send_clicked method doas qDebbug() << "serial opened-"
@sankarapandiyan you should put it in a if statement to call qDebug only if open() returns true
if(serial->open(QIODevice::ReadWrite))
-
@LeLev said in How to send the Data from Qt App to Arduino by serial communication:
hi, the 2nd line ot his on_send_clicked method doas qDebbug() << "serial opened-"
You are right. I searched the whole page for
serial opened
(or evenseral opened
), I have only just seen it is in a screenshot. However, I still do not see where thebaToSend
used there is declared or set, I only see it elsewhere (local variable insideon_send_clicked()
). Nor do I know what it is the text file read in. So it's still pretty hard to know what is going on.... -
@JonB Tried to Edit my code in correct form
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QList> #include <QComboBox> #include <QString> #include <QTextEdit> #include <QTime> #include <QDebug> #include <QtSerialPort/QSerialPortInfo> #include <QtSerialPort> #include <QFile> #include <QList> #include <QSerialPort> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); QString filename1="/home/adx-soft1/Shankar/serial/myfile1.txt"; QFile file(filename1); if(!file.exists()){ qDebug() << "NO FILE "<<filename1; }else{ qDebug() << filename1<<" ..."; } QString line1; ui->sender->clear(); if (file.open(QIODevice::ReadOnly | QIODevice::Text)){ ui->sender->setText(file.readAll()); } QList<QSerialPortInfo> list; list = QSerialPortInfo::availablePorts(); for (int i= 0; i < list.length(); i++) { ui->comboBox->addItem(list[i].portName()); } } MainWindow::~MainWindow() { serial->close(); delete ui; } void MainWindow::on_pushButton_clicked() { serial = new QSerialPort(this); serial->setPortName(ui->comboBox->currentText()); serial->setBaudRate(QSerialPort::Baud9600); serial->setDataBits(QSerialPort::Data8); serial->setParity(QSerialPort::NoParity); serial->setStopBits(QSerialPort::OneStop); serial->setFlowControl(QSerialPort::NoFlowControl); serial->open(QIODevice::ReadWrite); connect(serial, &QSerialPort::readyRead, this, &MainWindow::serialReceived); ui->progressBar->setValue(100); // ui->receive->clear(); } void MainWindow::checkAndSendData() { if(!m_lines.isEmpty()){ baToSend = m_lines.takeFirst().toUtf8(); serial->write(baToSend); //qDebug() << baToSend << "serial Writed---" ; ui->aknowmnt->setText("Sent Message -->" + QString(baToSend) + "\n"); } else { ui->aknowmnt->setText("Receiving "); } } void MainWindow ::on_send_clicked() { //serial->open(QIODevice::ReadWrite); qDebug () << baToSend << "seral opened ----" ; qDebug() << "Serial: " << serial->isOpen(); qDebug() << "Error: " << serial->error() << " | " << serial->errorString(); line = ui->sender->toPlainText(); QString txt1 = ui->receive->toPlainText(); /*QString*/ txt3 = ui->aknowmnt->toPlainText(); qDebug() << "m_lines: " << m_lines; if(m_lines.isEmpty()){ QFile inputFile(QString("/home/adx-soft1/Shankar/serial/myfile1.txt")); inputFile.open(QIODevice::ReadOnly); if (!inputFile.isOpen()) { return; } QTextStream stream(&inputFile); while(!stream.atEnd()) { QString strline = stream.readLine(); m_lines.append(strline + QString("\r\n")); qDebug() << "m_lines: " << m_lines; } } checkAndSendData(); } void MainWindow::serialReceived() { qDebug() << "serial->readAll().trimmed(): " << serial->readAll().trimmed(); QString glen = serial->readAll().trimmed(); qDebug() << "glen: " << glen; if (glen.length() > 0) { ui->receive->append(glen); /*QString*/ //line = ui->receive->toPlainText(); //ui->receive->setText(ui->receive->toPlainText() + line + "\n"); //ui->receive->setText(line + "\r\n" + glen + "\r\n"); //line = txt3; } checkAndSendData(); }
But i did not get the data received in arduino side
-
@LeLev ok fine i will correct it
-
@sankarapandiyan said in How to send the Data from Qt App to Arduino by serial communication:
PermissionError
Make sure your user has needed access rights for the serial port device file.
See for example https://askubuntu.com/questions/58119/changing-permissions-on-serial-port -
@jsulm Is it possible to open the port in both Qt app and Arduino in a same OS ..
Here if i open the port in Qt means , in Arduino ,i got a error the port is changed or not foundwhile if i open the port in Arduino first means , I got a error message in Qt as (PERMISSION ERROR)
I am Stucked here for a day, I am very new to this arduino topic , So give me some idea abouth this .
Thanks in advance .