En faite j’aimerais compiler l’ensemble ! Mon code GitHub et celui de Qt mais je n’arrive pas je vois pas trop car j’ai int main(argv …) et l’autre main (void) en faite c’est pour pouvoir ! Fin agite sur le programme GitHub via le Qt ! Fin ci cela est possible après ci il y as une autre moyen !
Il va vous falloir investir du temps pour comprendre les processus de compilation et peut être choisir un IDE adapté pour vos développements sur Linux.
Ça ne s’explique pas en 3 lignes…
Oui je suis d’accord ! J’utilise geany sur la framboise ! C’est peut-être pas le mieux ! Pour info j’ai réussi à faire une fenêtre avec 4 boutons sur Qt ! Je suis sur mon tel je le post demain ! Avec make cela se compil bien ! Je reste sur la simplicité de de codage car faut je prenne le temps d’utiliser les class et le découpage avec des .h comme dans beaucoup d’exemple ! Désolé d’être débutant ! Après je sais pas si tu as regardé mon code découper sur git? Tu en pense quoi ! Cela reste à ma hauteur de noobs
QtCreator est multiplateforme, donc tu peux le mettre facilement sur windows ou dans une machine virtuelle Linux et t'entrainer à faire des fenêtres, des boutons, des menus etc...
On a tous commencé quelque part - faut pas s’excuser pour cela.
Je n’ai pas regardé en détail votre découpage. Idéalement la découpe correspond à des unités de code qui ont un sens - une classe, une bibliothèque de fonctions ayant trait à un domaine particulier etc. On ne découpe pas juste pour faire des fichiers plus courts.
voila le code avec 4 boutons
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget fenetre;
fenetre.setFixedSize(1200,600);
// création d'une fenêtre
// taille de la fenêtre
QPushButton bouton1("BoutonMenu", &fenetre); // la fenêtre est le parent du bouton
bouton1.setText("Menu"); // le nouveau texte
bouton1.setToolTip("Texte d'aide"); // info bulle
bouton1.setFont(QFont("Comic Sans MS", 14)); // nouvelle police
bouton1.setCursor(Qt::PointingHandCursor);
bouton1.setGeometry(60, 50, 180, 70);
QPushButton bouton2("BoutonValid", &fenetre); // la fenêtre est le parent du bouton
bouton2.setText("Valid"); // le nouveau texte
bouton2.setToolTip("Texte d'aide"); // info bulle
bouton2.setFont(QFont("Comic Sans MS", 14)); // nouvelle police
bouton2.setCursor(Qt::PointingHandCursor);
bouton2.setGeometry(300, 50, 180, 70);
QPushButton bouton3("BoutonMoins", &fenetre); // la fenêtre est le parent du bouton
bouton3.setText("Moins"); // le nouveau texte
bouton3.setToolTip("Texte d'aide"); // info bulle
bouton3.setFont(QFont("Comic Sans MS", 14)); // nouvelle police
bouton3.setCursor(Qt::PointingHandCursor);
bouton3.setGeometry(700, 50, 180, 70);
QPushButton bouton4("BoutonPlus", &fenetre); // la fenêtre est le parent du bouton
bouton4.setText("Plus"); // le nouveau texte
bouton4.setToolTip("Texte d'aide"); // info bulle
bouton4.setFont(QFont("Comic Sans MS", 14)); // nouvelle police
bouton4.setCursor(Qt::PointingHandCursor);
bouton4.setGeometry(960, 50, 180, 70);
fenetre.show();
return app.exec();
}
en faite je veux faire un ecran tactile qui fait comme celui que j'ai deja sur le lcd (wokwi)
ce menu sert juste a modifier des consignes ,des vitesses (action sur les relais ), un petit programme test de relais et de lancer la machine a etat (gainable) .
et donc au final j'ai essayer de l'incorporer a mon code (decouper)
/****** ceci est le setup ******/
// le setup
int main (int argc, char *argv[]) {
// les pins
pinMode (relaiEteHiver, OUTPUT);
digitalWrite (relaiEteHiver, HIGH);
pinMode (relaiComp, OUTPUT);
digitalWrite (relaiComp, HIGH);
pinMode (relaiV4V, OUTPUT);
digitalWrite (relaiV4V, HIGH);
pinMode (relaiVitesseVentExt, OUTPUT);
digitalWrite (relaiVitesseVentExt, HIGH);
pinMode (relaiPetiteVitesseInt, OUTPUT);
digitalWrite (relaiPetiteVitesseInt, HIGH);
pinMode (relaiGrandeVitesseInt, OUTPUT);
digitalWrite (relaiGrandeVitesseInt, HIGH);
pinMode (thermostats, INPUT_PULLUP);
pinMode (capteurFiltre, INPUT_PULLUP);
// pin Sondes ds18b20
int DS_PIN = 4;
pinMode (DS_PIN, OPENDRAIN_PULLUP);
ds18b20 = new BB_DS18B20 (gpioline[DS_PIN]);
// le fichier ID sur les ds18b20
loadDSConfig ("DS18B20.conf", ds_ID);
// charge info sur les ds18b20
char ficConf[654] = "DS18B20.conf";
FILE * confHan = fopen(ficConf, "r");
if (NULL == confHan) {
cout << "Le fichier de configuration \n" << ficConf << "\n doit exister\n";
return (111);
}
fclose(confHan);
loadDSConfig("DS18B20.conf", ds_ID); // protégé contre le cas où il est absent
cout << "\n configure\n";
if (ds_ID.size() < 2) {
cout << "\nVous devez avoir au moins un thermomètre\n";
return(112);
}
// créer le vecteur contenant la température des DS18b20
for (uint loop = 0; loop < ds_ID.size(); loop++)
ds_temperature.push_back (
-9999.9); // enregistre une information invalide pour commencer
// le menu gainable tactile
QApplication app(argc, argv);
QWidget fenetre;
fenetre.setFixedSize(1200,600);
QPushButton bouton1("BoutonMenu", &fenetre); // la fenêtre est le parent du bouton
bouton1.setText("Menu"); // le nouveau texte
bouton1.setToolTip("Texte d'aide"); // info bulle
bouton1.setFont(QFont("Comic Sans MS", 14)); // nouvelle police
bouton1.setCursor(Qt::PointingHandCursor);
bouton1.setGeometry(60, 50, 180, 70);
QPushButton bouton2("BoutonValid", &fenetre); // la fenêtre est le parent du bouton
bouton2.setText("Valid"); // le nouveau texte
bouton2.setToolTip("Texte d'aide"); // info bulle
bouton2.setFont(QFont("Comic Sans MS", 14)); // nouvelle police
bouton2.setCursor(Qt::PointingHandCursor);
bouton2.setGeometry(300, 50, 180, 70);
QPushButton bouton3("BoutonMoins", &fenetre); // la fenêtre est le parent du bouton
bouton3.setText("Moins"); // le nouveau texte
bouton3.setToolTip("Texte d'aide"); // info bulle
bouton3.setFont(QFont("Comic Sans MS", 14)); // nouvelle police
bouton3.setCursor(Qt::PointingHandCursor);
bouton3.setGeometry(700, 50, 180, 70);
QPushButton bouton4("BoutonPlus", &fenetre); // la fenêtre est le parent du bouton
bouton4.setText("Plus"); // le nouveau texte
bouton4.setToolTip("Texte d'aide"); // info bulle
bouton4.setFont(QFont("Comic Sans MS", 14)); // nouvelle police
bouton4.setCursor(Qt::PointingHandCursor);
bouton4.setGeometry(960, 50, 180, 70);
fenetre.show();
return app.exec();
/****** ceci est la loop *****/
// la loop
while (1) {
lireDS18B20();
ecritTemps();
gainable();
fonctionsDivers();
affichageTerminal();
time_t rawtime;
time ( & rawtime);
cout << ctime ( & rawtime) << endl;
}
delete ds18b20;
return 0;
}
et j'obtient une erreur : /usr/bin/ld : main.cpp:(.text+0x2410) : référence indéfinie vers « ds_ID »
/usr/bin/ld : main.cpp:(.text+0x2450) : référence indéfinie vers « ds_ID »
/usr/bin/ld : main.cpp:(.text+0x2454) : référence indéfinie vers « ds_ID »
/usr/bin/ld : main.cpp:(.text+0x2484) : référence indéfinie vers « ds_temperature »
/usr/bin/ld : main.cpp:(.text+0x2488) : référence indéfinie vers « ds_temperature »
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/QtMenuGainable.dir/build.make:121 : QtMenuGainable] Erreur 1
make[1]: *** [CMakeFiles/Makefile2:96 : CMakeFiles/QtMenuGainable.dir/all] Erreur 2
make: *** [Makefile:103 : all] Erreur 2
j'ai pas tous marquer , mais je pense que le makefile est mal configurer
Je jetterai un œil quand je serai de retour chez moi dans quelques jours
Entre temps pouvez vous clarifier s’il y a toujours un Arduino dans le projet ou si vous voulez tout porter sur le RPi ? (Auquel cas ce ne serait plus un projet Arduino du tout).
j'ai les deux projets l'arduino qui est installer , et l'autre sur le rpi !
vous avez raison je poste le lien pour la framboise si cela peut interresser d'autre
https://forums.raspberrypi.com/viewtopic.php?p=2227971#p2227971
Je n'ai pas de Pi4 mais il y a un guide sur Qt
https://doc.qt.io/Boot2Qt/b2qt-qsg-raspberry.html
Cela toujours une aide sur le forum framboise de leur dire à quel point t'es bloqué
Je suis pas bloqué !mais j’essai d’apprendre! et de la manière que jml as fait ! ( cmakelist) c’est bien parce que l’ide Qt est pas installée sur la framboise ! Donc pas blocage ! Après c’est que le début . Pour moi faut que je revois entièrement mon code et que je l’adapte avec le menu tactil que je souhaite ! Mais doucement et sûrement !
A mon avis c'est la meilleure façon de faire.
Note juste que j'avais parlé d'une forme spécifique à Qt pour relier les widgets qui ne présente pas de difficultés particulières. J'aurais dû ajouter, pour ce qui est de la façon de coder en C++ mais cette opération nécessite un compilateur spécifique le MOC. Avec l'utilisation de QtCreator qui utilise qmake pour compiler c'est totalement transparent. De même le makefile est généré quasi automatiquement et ne demande que peu d'interventions manuelles
Aux vues de ton Git tu gères le C++ nettement mieux que nécessaire pour Arduino. Les variables globales étant inexistantes en C++ juste renforcer ses connaissances sur la portées des variables et l'allocation dynamique, voir la façon dont le mode d'emploi de Qt est fait et Qt ne te posera pas de problèmes insolubles.
mon cmakeliste.txt
cmake_minimum_required(VERSION 3.5)
project(QtGainable)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
set(SOURCES
main.cpp
affichageTerminal.cpp
BB_DS18B20.cpp
commandes.cpp
ecritTemps.cpp
gpioPin.cpp
lectureTemps.cpp
relais.cpp
vitesseVentilateurs.cpp
)
set(HEADERS
affichageTerminal.hpp
BB_DS18B20.hpp
commandes.hpp
ecritTemps.hpp
gpioPin.hpp
lectureTemps.hpp
relais.hpp
vitesseVentilateurs.hpp
)
add_executable(QtGainable &{SOURCES} &{HEADERS})
target_link_libraries(QtGainable Qt5::Widgets)
compile pas :
-- Configuring done
CMake Error at CMakeLists.txt:34 (add_executable):
Cannot find source file:
&{SOURCES}
Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm
.hpp .hxx .in .txx
-- Generating done
CMake Generate step failed. Build files cannot be regenerated correctly.
Je ne peux pas d'aider je n'utilise Qt qu'avec QtCreator comme IDE et ces questions ne se posent jamais à ma connaissance.
je me suis debrouiller mais maintenant il me manque je pense la bibliotheque sur le cmaklist txt
cmake_minimum_required(VERSION 3.5)
project(QtGainable)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
add_executable(QtGainable
main.cpp
affichageTerminal.cpp
BB_DS18B20.cpp
commandes.cpp
ecritTemps.cpp
gpioPin.cpp
lectureTemps.cpp
relais.cpp
vitesseVentilateurs.cpp
)
target_link_libraries(QtGainable Qt5::Widgets)
Que voulez vous dire ??
cela fonctionne
cmake_minimum_required(VERSION 3.5)
project(QtGainable)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
add_executable(QtGainable
main.cpp
affichageTerminal.cpp
BB_DS18B20.cpp
commandes.cpp
ecritTemps.cpp
gpioPin.cpp
lectureTemps.cpp
relais.cpp
vitesseVentilateurs.cpp
)
target_link_libraries(QtGainable Qt5::Widgets
gpiod
pthread
)
et tous est bon !
Oui, C'est excessif de dire inexistantes J'aurais dû dire d'utilisation déconseillée
J'aurais dû dire d'utilisation déconseillée
Ce n’est absolument pas déconseillé. Elles ont toute leur place (bien sûr faut pas faire n’importe quoi - potentiellement utiliser un namespace ou singleton etc)
Je ne sais pas où vous avez lu cela mais il y avait sans doute des compléments d’explications.