14/01/2022
Lunartec avec Qt
Pré-requis
Après avoir vu comment piloter l'afficheur Lunartec en C
Cours Qt , prise en mains
But
Réaliser une IHM Qt pour envoyer simplement un message sur l'afficheur Lunartec
Après avoir vu comment piloter l'afficheur Lunartec en C
le lien du tp précèdent =====>
Pour faire ce TP Qt il faut déjà maîtriser l'afficheur Lunartec à l'aide du tp C
La librairie de Qt permettant de gérer les ports séries.
Prérequis installation sous ubuntu pour Qt5 sous Linux
sudo apt update
sudo apt install libqt5serialport5
sudo apt install libqt5serialport5-dev
Après avoir installer la librairie QSerielPort
Il faut créer un projet Qt Application
Dans le .pro, ajouter cette ligne :
QT += serialport
ajouter la librairie et définir l'objet myserie dans le mainwindow.h de type QSerialPort , définit avec un pointeur.
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSerialPort>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
QSerialPort *myserie;
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
pour instancier l'objet myserie
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <time.h>
#include <QDebug>
#include <QSerialPortInfo>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
myserie = new QSerialPort(this); // instanciation dynamique de l'objet myserie
myserie->setPortName(QLatin1String("/dev/ttyUSB0")); //ici l'afficheur
// Ouverture en écriture et lecture
if(myserie->open(QIODevice::ReadWrite) == true)
{
qDebug() << "open ok";
}
else
{
qDebug() << "open pb";
return;
}
// Configuration du port
myserie->setBaudRate(QSerialPort::Baud9600,QSerialPort::AllDirections); // vitesse
myserie->setDataBits(QSerialPort::Data8); // 8 bits de données
myserie->setFlowControl(QSerialPort::NoFlowControl); // pas de control
myserie->setParity(QSerialPort::NoParity); // pas de parité
myserie->setStopBits(QSerialPort::OneStop); // un seul bit de stop
myserie->waitForBytesWritten(100); // delai en ms d'attente entre 2 écritures
myserie->waitForReadyRead(100); // avant lecture
}
MainWindow::~MainWindow()
{
delete ui;
}
Le bouton Envoi
va aller au slot avec un clicked
void MainWindow::on_pushButton_clicked()
{
}
Compléter le code pour que le programme fonctionne.