Pages: [1]   Go Down
Author Topic: Communication Ordi-Arduino  (Read 1471 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :
Code:

    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);

   
   
Du coté de l'arduino j'ai ceci :

Code:
void setup()
{
  
  Serial.begin(9600);
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  
  
}

void loop()
{

    int boutonA = digitalRead(2);
    int boutonB = digitalRead(3);
    
    Serial.print(boutonA);
Serial.print(boutonB);
  
}


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 ?


* Schema.jpg (30.35 KB, 1001x768 - viewed 12 times.)
« Last Edit: April 20, 2011, 04:38:23 am by Pop360 » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 92
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Attention : ce que je vais dire n'est peut être pas bon je ne suis pas un spécialiste smiley
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.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai remplacer print par println, mais toujours pas moyen de faire comprendre à Qt que quelque chose est branché  smiley-cry
Merci quand même pour ton aide.
Sinon, sais-tu si le code Qt est bon ?
Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3435
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
    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.
Logged

FRANCE
Offline Offline
Sr. Member
****
Karma: 0
Posts: 338
Arduino rocks .... oulalalalala
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
http://www.codeproject.com/KB/system/serial.aspx
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai testé sans lancer le logiciel Arduino, et j'ai mis le code suivant à la place.

Code:
    if(!port->isOpen())
    {
QMessageBox::critical(this, "Erreur", "Erreur le port COM17 est indisponnible : <br />" + port->errorString());
    }

Mais j'ai "Erreur le port COM17 est indisponnible : unknow error", j'en sais toujours pas plus... smiley-sad-blue
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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)

Code:
bool CptS = false;
bool CptE = false;
bool quitte = false;
int premierActif = 0;
int premierInactif = 0;
bool procedure= false;
int wSortie = 1, wEntree = 2;
int compteur = 0;

void setup()
{
 
  Serial.begin(9600);
  pinMode(2, INPUT);
  pinMode(3, INPUT);
 
}

void loop()
{

    int aCptE = digitalRead(2);
    int aCptS = digitalRead(3);
   
    if (aCptE != 0)
    {
     CptE = true;
    }
    else
    {
     CptE = false;
    }
    if (aCptS!= 0)
    {
     CptS = true;
    }
    else
    {
     CptS = false;
    }
   
   
        if (!procedure)
        {
            if (CptS && !CptE)
            {
                premierActif = wSortie;
            }
            else if (CptE && !CptS)
            {
                premierActif = wEntree;
            }
            else if (CptS && CptE)
            {
                procedure = true;
                //Serial.print("\nProcedure\n");
            }
        }
        else
        {
            if (CptS && !CptE)
            {
                premierInactif = wEntree;
            }
            else if (!CptS && CptE)
            {
                premierInactif = wSortie;
            }
            else if (!CptS && !CptE)
            {
                if (premierActif == wSortie && premierInactif == wSortie)
                {
                    Entree();
                }
                else if (premierActif == wEntree && premierInactif == wEntree)
                {
                    Sortie();
                }
                else
                {
                    Serial.print("\nAnnulation");
                }
                procedure = false;
            }
        }

 
}


void Entree()
{
    if (compteur < 150)
    {
        compteur ++;
        Serial.print("\nEntree -> ");
        Serial.print("Compteur = ");
        Serial.print(compteur, DEC);
        Serial.print("\n");
    }
    else
    {
        Serial.print("\nCompteur au maximum ! (150)\n");
    }
}


void Sortie()
{
    if (compteur > 0)
    {
        compteur --;
        Serial.print("\nSortie -> ");
        Serial.print("Compteur = ");
        Serial.print(compteur, DEC);
        Serial.print("\n");
    }
    else
    {
        Serial.print("\nCompteur au minimum ! (0)\n");
    }
}



Logged

FRANCE
Offline Offline
Sr. Member
****
Karma: 0
Posts: 338
Arduino rocks .... oulalalalala
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

regardes plutot avec High et Low comme valeurs .
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ça marche pas mieux
Je comprends pas c'est quoi qui marche pas  smiley-sad
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 185
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Logged

pas taper... sauf application de l'article 35 ...

FRANCE
Offline Offline
Sr. Member
****
Karma: 0
Posts: 338
Arduino rocks .... oulalalalala
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

essayes port 16. ( 17-1)
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, merci pour les conseils, je vais tester tous ça. Je marquerai résolu si ça marche smiley
Logged

FRANCE
Offline Offline
Sr. Member
****
Karma: 0
Posts: 338
Arduino rocks .... oulalalalala
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

tu es sous quelle plateforme ?
Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3435
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 185
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En principe ce devrait être le même nom de port que celui qui apparait dans l'IDE arduino
Oui, je suis d'accord, mais j'ai déjà été emm**dé avec ce genre de truc en développant des petits soft sous Qt. Donc ça coute rien de vérifier
Logged

pas taper... sauf application de l'article 35 ...

Pages: [1]   Go Up
Jump to: