Bonjour à tous,
Je me présente Jérémy, 39 ans, fan de microcontrôleur. Je programme mes petites bêtes en C .
Actuellement je travaille avec un module radio pour piloter un robot ( pour mes enfants).
Ce module radio se branche sur un port USB, et avec un émulateur UART je communique avec lui (j'utilise realterm).
Voila pour la présentation !
Rentrons dans le vif du sujet . Je souhaite créer avec Qt, une fenêtre possédant des boutons ( avancer , reculer etc...).
J'ai donc suivant les cours d'open classroom. J'avoue le C++ , me parait bien compliqué au premier abord, surtout dans sa configuration, et ses multiples fichiers trés déroutants.
Pour faire simple au départ, j'aurais aimé créer seulement un bouton dans une fenêtre qui, quand on clic dessus envoie une série de chiffres( Bytes) .
Cette série de chiffre est destinée à être envoyer au module radio qui va à son tour envoyer une commande au robot par voie radio.
Mon module radio se trouve sur le port "COM7".
Le série de chiffre à envoyer est [2,0,1,5,6] en décimal.
A force de lecture et d’exemple j'ai réussis à envoyer une trame après la compilation mais c'est tout lol.
Je confonds un peu tout et je ne sais plus comment créer un bouton qui pourrait exécuter une fonction. cette fonction enverrai la série de bytes. Pour le moment je configure mon port et j’envoie tout de suite ma trame.
Mon module radio allume ca led prouvent qu'il a bien recu la trame!
Voila mon travail pour le moment.
.pro
Code Qt-pro : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 #------------------------------------------------- # # Project created by QtCreator 2018-11-04T09:00:39 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = sans_titre TEMPLATE = app # The following define makes your compiler emit warnings if you use # any feature of Qt which has been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 CONFIG += c++11 QT += serialport SOURCES += \ main.cpp \ mainwindow.cpp HEADERS += \ mainwindow.h FORMS += \ mainwindow.ui # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target
mainwindow.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
main.ccp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 #include "mainwindow.h" #include <QApplication> #include <QSerialPortInfo> #include <QSerialPort> #include <QDebug> int main(int argc, char *argv[]) { QApplication a(argc, argv); QSerialPort serial; serial.setPortName("COM7"); // Si le port est ouvert je le configure if(serial.open(QIODevice::ReadWrite)){ if(!serial.setBaudRate(QSerialPort::Baud9600)) qDebug()<<serial.errorString(); if(!serial.setDataBits(QSerialPort::Data8)) qDebug()<<serial.errorString(); if(!serial.setParity(QSerialPort::NoParity)) qDebug()<<serial.errorString(); if(!serial.setStopBits(QSerialPort::OneStop)) qDebug()<<serial.errorString(); if(!serial.setFlowControl(QSerialPort::NoFlowControl)) qDebug()<<serial.errorString(); QByteArray ba; //je creer un tableau de bytes ba.resize(5); // Je lui affecte 5 cases ba[0] = 2; // je le remplis de ma série de bytes ba[1] = 0; ba[2] = 1; ba[3] = 5; ba[4] = 6; serial.write(ba); // J'envoie la trame au port serie if(serial.waitForReadyRead(100)){ //Data was returned qDebug()<<"Response: "<<serial.readAll(); }else{ //No data qDebug()<<"Time out"; } //I have finish alla operation serial.close(); } // Si le port n'as pas été ouvert je l'indique else{ qDebug()<<"Serial COM7 not opened. Error: "<<serial.errorString(); } MainWindow w; w.show(); return a.exec(); }
mainwindow.cpp
le fichier mainwindow.ui
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; }
Je ne peux pas le copier. il s'agit d'une fenêtre ou j'ai place un Bouton nommé "BoutonAvance"
Voila j’espère qu"une âme charitable maitrisant ce langage pourra me guider sur le chemin de la réussite !
Merci de m'avoir lu !
Partager