Go Down

Topic: Port Série (Read 1 time) previous topic - next topic

ogaleote

Bonjour,

J'ai besoin de faire communiquer l'Arduino en série.
Mais je ne comprends pas comment on s'en sert...
J'ai lu la doc sur le site, mais rien ne se passe.

Est ce que vous pouvez m'aider ?

En vous remerciant d'avance !

Olivier

gaudeval

Faire communiquer arduino avec quel équipement ?
As-tu vérifier que la vitesse, RTS/CTS, stop bit et parité corresponde bien à l'équipement auquel tu veux te connecter ?

As-tu vérifier les niveaux de tensions utilisés pour ta communication série ? Un convertisseur RS232 est nécessaire si tu veux connecter ta carte à un GPS en rs232 par exemple.

La doc se trouve sinon à cette adresse : http://www.arduino.cc/en/Serial/Println

Bon courage


ogaleote

Bonjour,

Pour le moment j'ai brancher un adaptateur TTL/RS232 puis vers mon poste, et je capture avec Hyperterm ou avec GTKterm.

J'ai brancher l'adaptateur sur le port TX/RX de l'Arduino. Mais il faut les paramétrer en port série, c'est bien ça ?
Comme ceci ?
int rxPin = 0;                    
int txPin = 1;  
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);

Mais après comment différencié le port série USB ou les pinouts ?

Olivier





gaudeval

Pour le moment, vous mettez la ligne RX à 0 et TX à 1, rien de plus. Vous utilisez les pin comme I/O et non un UART.

Voici un exemple pour renvoyer ce que vous envoyez à partir du pc :

int incomingByte = 0;      // for incoming serial data

void setup() {
     Serial.begin(9600);      // opens serial port, sets data rate to 9600 bps
}

void loop() {

     // send data only when you receive data:
     if (Serial.available() > 0) {
           // read the incoming byte:
           incomingByte = Serial.read();

           // say what you got:
           Serial.print("I received: ");
           Serial.println(incomingByte, DEC);
     }
}

Vous devez par ailleurs utiliser la pin 1 pour le TX et  0 pour le RX

Cela devrait fonctionner comme cela

Bonne chance !

ogaleote

Merci, je vais essayer !

ogaleote

Bon, j'ai câblé et compilé.
Quand je tape un caractère dans la console du compilateur, je reçois bien mon caractère tapé et dans la console 'I received:' ma valeur.

Mais j'aurais besoin de l'autre sens, c'est à dire recevoir à partir de l'hyperterm jusqu'à la console.
C'est possible ?

Olivier

gaudeval

Par exemple :

/*
Uses a FOR loop for data and prints a number in various formats.
*/
int x = 0;    // variable

void setup() {
 Serial.begin(9600);      // open the serial port at 9600 bps:    
}

void loop() {  
 // print labels
 Serial.print("NO FORMAT");       // prints a label
 Serial.print("\t");              // prints a tab

 Serial.print("DEC");  
 Serial.print("\t");      

 Serial.print("HEX");
 Serial.print("\t");  

 Serial.print("OCT");
 Serial.print("\t");

 Serial.print("BIN");
 Serial.print("\t");

 Serial.println("BYTE");

 for(x=0; x< 64; x++){    // only part of the ASCII chart, change to suit

   // print it out in many formats:
   Serial.print(x);       // print as an ASCII-encoded decimal - same as "DEC"
   Serial.print("\t");    // prints a tab

   Serial.print(x, DEC);  // print as an ASCII-encoded decimal
   Serial.print("\t");    // prints a tab

   Serial.print(x, HEX);  // print as an ASCII-encoded hexadecimal
   Serial.print("\t");    // prints a tab

   Serial.print(x, OCT);  // print as an ASCII-encoded octal
   Serial.print("\t");    // prints a tab

   Serial.print(x, BIN);  // print as an ASCII-encoded binary
   Serial.print("\t");    // prints a tab

   Serial.println(x, BYTE);    // prints as a raw byte value,
   //                             then adds the carriage return with "println"
   delay(200);            // delay 200 milliseconds
 }
 Serial.println("");      // prints another carriage return
}

Bon courage !

ogaleote

Merci pour retour.
J'ai essayer, cela fonctionne bien sur le port USB et en même temps sur les ports TX et RX de la carte.

Mon but est d'utiliser les deux séparément.

Olivier

FP24V

#8
Dec 06, 2009, 10:04 pm Last Edit: Dec 06, 2009, 10:23 pm by FP24V Reason: 1
bonjour à tous

suis vraiment désolé pour la question qui va suivre car je débute dans l'arduino, je rame à mort, (je viens d'automatisme avec interface graphique, donc je suis totalement paumé mais bon.

j'ai absolument rien compris, enfin pas grand chose.

bon j'explique mon probléme, il va paraitre trés simple

Bon je suis en train de bricoler un programme pour récupérer la téléinformation de mon compteur edf et agir en fonction de certaine info lu.

la partie démodulation n'étant pas géré par moi je pars donc d'un signal serie à 1200 baud

voici mon prg il est fonctionnelle en ce moment à quelque détail prés. certain bit comme start pause et stop sont simulé, et les commentaire sont pas jours la flemmes aprés 8 h à essayer de faire un truc qui tourne rond

attention c'est lourd:

la preuve trop gros pour rentrer sur le post intégralement j'ai viré deux trois petite chose
ps: les commentaire sont pas à jours et faux par endroits

le prg décripte des suite de caractére que j'entre par le sérial moniteur, donc via usb
la premiére chose je voudrait qu'il cherche les info sur la pin rx (là ou le compteur sera connecter) et sur l'usb là ou je laisserai un pc pour suivre certaine chose telque les conso ou donner des instruction corrective, mais était il possbile car comme sur la rx je boucle les info en permanance??
la seconde chose je voudrait que le prg me réponde sur l'usb, s'il balance aussi sur le tx c'est pas grave

Code: [Select]

#define STX  'X'
#define ESPACE 'Z'
#define ETX  'Y'
int bleu =  3;
int blanc =  4;
int rouge =  5;
int hc =  6;
int hp =  7;
int prouge=8;
int pblanc=9;
int pbleu=10;
int online=2;
int b;
int c;
int d;
int e;
int f;
void setup()
{
 Serial.begin(1200);
pinMode(bleu, OUTPUT);
pinMode(blanc, OUTPUT);
pinMode(rouge, OUTPUT);
pinMode(hp, OUTPUT);
pinMode(hc, OUTPUT);
pinMode(pbleu, OUTPUT);
pinMode(pblanc, OUTPUT);
pinMode(prouge, OUTPUT);
pinMode(online, OUTPUT);

}

void loop()

char trame[100]; //réservation de place pour stocker une suite de caractére
char trame2[100]; //réservation de place pour stocker une suite de caractére
char trame3[100]; //réservation de place pour stocker une suite de caractére
if (Serial.available() > 0)  //si donnée quelquonque perçus
 {int c = Serial.read(); //intégré les donnée dans la mémoire C
   if(c==STX) //si dans c je vois STX
   {
     {for(int i=0; i<4; i++) //chercher dans les caractéres 0 à 3
      {
      delay (100); //delay d'attente  pour éviter perte synchro
      trame[i]=Serial.read(); //stocké les données perçus dans l'emplacement réservé
      trame[4]=0;
      }    
           
        if(strcmp(trame,"PTEC")==0) //si la chaine PTEC reçu
        {int c = Serial.read(); //intégré les donnée dans la mémoire C
         if(c==ESPACE) //si dans c je vois ESPACE
             {
              Serial.println("indication horraire en cours");//afficher
              for(int i=0; i<4; i++) //chercher dans les caractéres 4
                 {
                  delay (100); //delay d'attente  pour éviter perte synchro
                  trame2[i]=Serial.read(); //stocké les données perçus dans l'emplacement réservé
                  trame2[4]=0;
                 }
                    if(strcmp(trame2,"HCJB")==0) //si la chaine PTEC reçu
                    {Serial.println("heure creuse jour bleu");//afficher
                    digitalWrite (bleu,LOW);
                    digitalWrite (blanc,LOW);
                    digitalWrite (rouge,LOW);
                    digitalWrite (hc,LOW);
                    digitalWrite (hp,LOW);
                    digitalWrite (bleu,HIGH);
                    digitalWrite (hc,HIGH);
                    }
                    else if(strcmp(trame2,"HPJB")==0) //si la chaine PTEC reçu
                    {Serial.println("heure plein jour bleu");//afficher
                    digitalWrite (bleu,LOW);
                    digitalWrite (blanc,LOW);
                    digitalWrite (rouge,LOW);
                    digitalWrite (hc,LOW);
                    digitalWrite (hp,LOW);
                    digitalWrite (bleu,HIGH);
                    digitalWrite (hp,HIGH);
                    }
                    else if(strcmp(trame2,"HCJW")==0) //si la chaine PTEC reçu
                    {Serial.println("heure creuse jour blanc");//afficher
                    digitalWrite (bleu,LOW);
                    digitalWrite (blanc,LOW);
                    digitalWrite (rouge,LOW);
                    digitalWrite (hc,LOW);
                    digitalWrite (hp,LOW);
                    digitalWrite (blanc,HIGH);
                    digitalWrite (hc,HIGH);
                    }
                    else if(strcmp(trame2,"HPJW")==0) //si la chaine PTEC reçu
                    {Serial.println("heure pleine jour blanc");//afficher
                    digitalWrite (bleu,LOW);
                    digitalWrite (blanc,LOW);
                    digitalWrite (rouge,LOW);
                    digitalWrite (hc,LOW);
                    digitalWrite (hp,LOW);
                    digitalWrite (blanc,HIGH);
                    digitalWrite (hp,HIGH);
                    }
                    else if(strcmp(trame2,"HCJR")==0) //si la chaine PTEC reçu
                    {Serial.println("heure creuse jour rouge");//afficher
                    digitalWrite (bleu,LOW);
                    digitalWrite (blanc,LOW);
                    digitalWrite (rouge,LOW);
                    digitalWrite (hc,LOW);
                    digitalWrite (hp,LOW);
                    digitalWrite (rouge,HIGH);
                    digitalWrite (hc,HIGH);
                    }
                    else if(strcmp(trame2,"HPJR")==0) //si la chaine PTEC reçu
                    {Serial.println("heure pleine jour rouge");//afficher
                    digitalWrite (bleu,LOW);
                    digitalWrite (blanc,LOW);
                    digitalWrite (rouge,LOW);
                    digitalWrite (hc,LOW);
                    digitalWrite (hp,LOW);
                    digitalWrite (rouge,HIGH);
                    digitalWrite (hp,HIGH);
                    }
                 else
                 {Serial.println("tarif non reconnu");
                 }
             }
        }
             
        else if(strcmp(trame,"DEMA")==0)
        {Serial.println("indication pour demain");
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       {int d = Serial.read(); //intégré les donnée dans la mémoire C
        int e = Serial.read(); //intégré les donnée dans la mémoire C
        int c = Serial.read(); //intégré les donnée dans la mémoire C
         if(c==ESPACE) //si dans c je vois ESPACE
             {for(int i=0; i<4; i++) //chercher dans les caractéres 4
                 {
                  delay (100); //delay d'attente  pour éviter perte synchro
                  trame3[i]=Serial.read(); //stocké les données perçus dans l'emplacement réservé
                  trame3[4]=0;
                 }
                    if(strcmp(trame3,"BLEU")==0) //si la chaine bleu reçu
                    {Serial.println("prevision bleu");//afficher
                    digitalWrite (pbleu,LOW);
                    digitalWrite (pblanc,LOW);
                    digitalWrite (prouge,LOW);
                    digitalWrite (pbleu,HIGH);
                    }
                    else if(strcmp(trame3,"BLAN")==0) //si la chaine blan reçu
                    {Serial.println("prevision blanc");//afficher
                    digitalWrite (pbleu,LOW);
                    digitalWrite (pblanc,LOW);
                    digitalWrite (prouge,LOW);
                    digitalWrite (pblanc,HIGH);
                    }
                    else if(strcmp(trame3,"ROUG")==0) //si la chaine roug reçu
                    {Serial.println("prevision rouge");//afficher
                    digitalWrite (pbleu,LOW);
                    digitalWrite (pblanc,LOW);
                    digitalWrite (prouge,LOW);
                    digitalWrite (prouge,HIGH);
                    }
                   
                 else
                 {Serial.println("tarif non reconnu ou non indiqué");
                 }
             }
       }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }
        else //sinon
        {
        Serial.println("trame non reconnus ou inutile"); //afficher
        }
     }
     
   }
 }  
}


je voudrais asvoir ce que je dois ajouter comme ligne et ou,

avec les explique ça serait encore mieux

je tourne avec une usb board.

merci d'avance

ps je sais pour les puriste y plus efficace et plus compact mais avec un arduino seulement depuis 3 jours et sans y avoir jamais touché, j'ai fait ce que j'ai pu


pour ceux qu'il veulent le voir parler rentrer la serie suivante dans le sérial moniteur.

XPTECZKFSDHFDSJXPTECZFDSJKLSDJFXJHLKFJSDKLFJLSKDJFLXDEMAINZFDSJKLFSDHJKHXDEMAINZBLEUXJKLFDSQJFSLDKFJXPTECZHCJR
Je ne conçois que trés peu, je recycle beaucoup les codes que je trouve.

Go Up