Bonjour tout le monde ! Cela va faire un petit bout de temps que j'essaye d'utiliser Qt pour pouvoir communiquer avec ma carte Arduino...
Je sais qu'il faut utiliser QextSerialPort pour initier la liaison série mais j'ai toujours un problème différent qui survient alors que j'ai essayé tout les tuto existant.
J'essaye de comprendre comment fonctionne Qt petit à petit mais je veux juste faire un programme tout bête pour au moins initialiser la liaison avec ma carte et récupérer une donnée.
J'ai repris au début ça sera peut être plus simple... Je viens de crée un nouveau projet vide dans lequel j'ai un fichier .pro et un fichier C++ :
C'est juste LA fonction la plus importante d'un programme vu que c'est elle qui est appelée en première et qui dirige ensuite toute l'application.
=====
Généralement, avec Qt, la fonction main est très courte vu qu'elle ne fait que créer la classe principale puis appeler QApplication::exec.
Ensuite, c'est la classe principale qui contient toute la logique du code.
=====
Voici un petit bout de de code fait rapidement.
Note : ce code n'est là que pour te donner des idées, il est très probable qu'il ne compile pas puisque je code en direct dans la zone de texte du SDZ.
Le debugger me dit "return type specification for constructor invalid".. J'ai regarder les instructions sur cette classe et tout est tapé correctement...
J'ai aussi retiré le symbole ~ car quand il est présent j'ai un code d'erreur : "no matching function for call to 'SerialPortTextZone::SerialPortTextZone()'
Des explications ?
- Edité par DangerousMic 17 septembre 2013 à 0:00:55
- son fichier header serialporttextzone.h (mon deuxième bout de code)
- son fichier source serialporttextzone.cpp (mon troisième bout de code)
Au final, tu te retrouves donc avec un projet contenant 3 fichiers.
=====
Concernant les erreurs que tu as, je t'avais prévenu que je pouvais en avoir faite quelques uns vu que ce n'est pas vraiment évident de faire un code parfait dans une zone de texte du site du zéro.
Désolé pour le temps de réponse... j'ai été pris par les études.
Eskimon : J'avais déjà regarder mais sans résultats c'est pour ca que je reprend depuis le début avec vous pour mieux comprendre le fonctionnement de Qt.
Avec mon code actuel (donné en partie par lorrio), j'ai maintenant beaucoup d'erreur du genre :
une fois lors du choix du port : - class 'SerialPortTextZone' does not have any field named 'm_serialPort'
et plusieur fois : - 'm_serialPort' was not declared in this scope
J'ai que des erreurs dans le fichier serialporttextzone.cpp
- Edité par DangerousMic 22 septembre 2013 à 2:02:54
> j'essaye d'utiliser Qt pour pouvoir communiquer avec ma carte Arduino...
> Je sais qu'il faut utiliser QextSerialPort
Hum.
En python avec pyserial tu en as pour 12 secondes, pourquoi ne pas utiliser un langage de script pour faire un script ?
>>> ser = serial.Serial('/dev/ttyS1', 19200, timeout=1)
>>> x = ser.read() # read one byte
>>> s = ser.read(10) # read up to ten bytes (timeout)
>>> line = ser.readline() # read a '\n' terminated line
>>> ser.close()
J'ai corrigé certaines erreurs dont celles que tu viens de me donner. J'ai pas fait attention à mon #endif et pour l'attribut... c'étais LA principale erreur --' il me semblait l'avoir corrigé pourtant mais bon.
J'ai à la compilation une seule erreur :
erreur : cannot find -lqextserialportd
erreur : error: ld returned 1 exit status
Cela vient du fichier .pro il me semble...
- Edité par DangerousMic 24 septembre 2013 à 15:46:18
OKok je vois... par contre à quoi sert le 1 rajouté dans LIBS += -l ?
J'ai donc ajouté les corrections et là, j'arrive dans une situation dans laquelle je suis déjà tombé en suivant les tutos avant de venir dans le forum...
J'ai des erreurs partout ! 69 au total et c'est que des erreurs particulières
Je vais en donner quelques unes :
main.cpp
erreur : undefined reference to `_imp___ZN7QWidget4showEv' (à la ligne textZone.show(); )
serialporttextzone.cpp
erreur : undefined reference to `_imp___ZN9QTextEditC2EP7QWidget' (à la ligne m_serialPort(newQextSerialPort("COM10")))
erreur : undefined reference to `_imp___ZN9QTextEdit6appendERK7QString' (à la ligne append(tr("Impossibletoopenport..."));)
Et j'en passe... elles sont toutes similaires et les erreurs proviennent de "serialporttextzone". J'ai même un fichier écrit en héxa dans les erreurs (fichier serialporttextzone.o)
Encore merci lorrio pour ta patience et ton partage de connaissance
Dans ton dossier build, on voit que tes fichiers lib se nomme respectivement libqextserialportd1.a et libqextserialportd1.dll
Donc il te faut mettre : LIBS += -lqextserialportd1
Le d indique qu'il s'agit d'une version de debug, c'est pour cela que je t'ai dis que tu ne pourras pas compiler en release.
Concernant les autres erreurs, le compilateur te dit qu'il ne trouve pas les fonctions QWidget::show, QTextEdit::QTextEdit et QString::append.
Si il ne les trouve pas, c'est tout simplement que tu n'as pas ajouté la lib Qt à ton projet (oui, même pour un projet avec QtCreator, il faut spécifier que tu veux utiliser la lib Qt).
Au tout début de ton .pro, ajoutes ceci : QT += core gui
Par contre, QT += gui n'a rien changé j'ai donc essayé QT+=widgets et ça marche ! Mon programme compile sans erreur. J'ai aucune fenetre qui s'ouvre mais juste un message en rouge "Le programme s'est terminé subitement"
Mais le principale est que j'ai plus d'erreur, c'est déjà une bonne chose !
Mais l'affichage de l'erreur pointe vers mon fichier qextserialportd1.dll...
De plus, il m'avait demandé le fichier QtCored4 alors qu'il devrait plutot me demander le fichier Qt5Cored.dll qui, celui là, est dans mes fichiers de Qt.
Je pense que mon projet Qt a un problème de configuration... je pense.
EDIT
En regardant les fichiers de Qt, je suis tombé sur une bibliothèque QtSerialPort. J'ai effectué une recherche et la version 5 de Qt intègre une bibliothèque de communication sur port série --'
- Edité par DangerousMic 25 septembre 2013 à 18:48:58
Communication Série Qt avec QextSerialPort Arduino
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !