Bonjour, j'ai fait quelques recherches sur des sites et forums relatifs à Arduino, mais je n'ai toujours pas trouvé comment faire pour communiquer avec un PC.
La console d'Arduino (SerialMonitor) fonctionne et on peut lire les données dedans, j'ai aussi fait un test avec Processing qui marche, mais je n'arrive pas avec d'autres libraires à lire ces données.
Dans mon branchement j'ai juste la carte Arduino Uno reliée par USB à l'ordinateur et 2 boutons poussoirs connectés au broches 2 et 3.
(schéma joint avec le post)
Ce que j'aimerais faire c'est pouvoir lire les états de ces boutons envoyés par Serial de l'arduino avec une autre application que je programme.
J'essai de récupérer ces informations avec QextSerialPort pour l'intéger dans une interface Qt, mais la connexion pose toujours problème :
port = new QextSerialPort("COM17"); // je le mets sur COM17 comme le SerialMonitor
port->open(QIODevice::WriteOnly);
if(!port->isOpen())
{
QMessageBox::critical(this, "Erreur", "Erreur le port COM17 n'est pas connecté"); // ce message s'affiche toujours alors que le SerialMonitor affiche tout correctement
}
else
{
port->setBaudRate(BAUD9600);
port->setFlowControl(FLOW_XONXOFF); // là aussi je ne suis pas sûre
port->setParity(PAR_MARK); // idem
port->setDataBits(DATA_8);
port->setStopBits(STOP_1);
D'après certains sites j'ai cru comprendre que pour communiquer entre Arduino et PC comme ceci il fallait utiliser les broches Tx et Rx, est-ce bien cela ? Si oui quels branchements faut-il effectuer ? Et que doit-je rajouter dans mon programme ?
Attention : ce que je vais dire n'est peut être pas bon je ne suis pas un spécialiste
D'après ce que j'ai pu voir sur la communication avec le port série il n'y a pas besoin de communiquer avec rx et tx, il me semble qu'envoyer des valeurs sur le port avec la fonction "serial.println" (pas sur du nom) suffit pour faire ce que tu souhaites.
J'ai remplacer print par println, mais toujours pas moyen de faire comprendre à Qt que quelque chose est branché =(
Merci quand même pour ton aide.
Sinon, sais-tu si le code Qt est bon ?
if(!port->isOpen())
{
QMessageBox::critical(this, "Erreur", "Erreur le port COM17 n'est pas connecté"); // ce message s'affiche toujours alors que le SerialMonitor affiche tout correctement
}
Si j'ai bien interprété ton commentaire dans le code, tu ne peux pas avoir en même temps le serial monitor et un autre flux ouvert sur le même port com.
Si tu regardes le message d'erreur retourné par ton port->open(QIODevice::WriteOnly) il doit te dire que le port n'est pas disponible.
dans ton script arduino, écrit sur le port série UNIQUEMENT quand un des boutons a un changement d 'état Cela te permettra d'éviter en premier l eceuil d'un overflow de ton api.
perso je suis passé par C-Serial, qui fonctionne tres bien et s'intègre très facilement
dans ton script arduino, écrit sur le port série UNIQUEMENT quand un des boutons a un changement d 'état Cela te permettra d'éviter en premier l eceuil d'un overflow de ton api.
En fait c'est déjà le cas, mais c'est pour simplifier que j'avais mis ça , sinon merci pour le lien.
Voici le script complet : (les deux boutons sont censés simuler des capteurs, c’est pour compter des entrée et sorties)
un problème de configuration des trames série (7/8bit / parité/ etc...)
Par contre, com17 : es-tu sur du port (ne serait-ce pas USB17 ou /dev/tty17 par exemple) ? Est-ce bien la bonne écriture (Com17 ou com17 au lieu COM17 par exemple)
taddot:
un problème de configuration des trames série (7/8bit / parité/ etc...)
Par contre, com17 : es-tu sur du port (ne serait-ce pas USB17 ou /dev/tty17 par exemple) ? Est-ce bien la bonne écriture (Com17 ou com17 au lieu COM17 par exemple)
En principe ce devrait être le même nom de port que celui qui apparait dans l'IDE arduino