Pages: [1]   Go Down
Author Topic: Port Série  (Read 1331 times)
0 Members and 1 Guest are viewing this topic.
La Garde France
Offline Offline
Newbie
*
Karma: 0
Posts: 27
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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

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

Logged

La Garde France
Offline Offline
Newbie
*
Karma: 0
Posts: 27
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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




Logged

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

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

La Garde France
Offline Offline
Newbie
*
Karma: 0
Posts: 27
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci, je vais essayer !
Logged

La Garde France
Offline Offline
Newbie
*
Karma: 0
Posts: 27
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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

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

La Garde France
Offline Offline
Newbie
*
Karma: 0
Posts: 27
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

+33 76500
Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
Arduinaute du dimanche
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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
« Last Edit: December 06, 2009, 04:23:40 pm by FP24V » Logged

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

Pages: [1]   Go Up
Jump to: