Go Down

Topic: communication série entre deux Arduino (Read 4 times) previous topic - next topic

Jean-François

Mar 15, 2009, 01:17 pm Last Edit: Mar 15, 2009, 01:19 pm by jfs Reason: 1
J'ai branché deux plaques Arduino par les pins rx-tx, en croisant les fils, les deux sont sur le même Gnd.

la première plaque m'envoit :

Code: [Select]

...
Serial.print ("   time ");
 Serial.print (millis(),DEC);
 Serial.print ("   rpm ");
 Serial.print(rpm,DEC);
 Serial.print ("   pos ");
 Serial.print (encoderpos,DEC);
 Serial.print ("   index ");
 Serial.print (index,DEC);
 Serial.println ("\0");
...



Et la deuxième a ce code:

Code: [Select]
int incomingByte ;      
char myStr[100];


void setup() {
     Serial.begin(38400);
}

void loop() {

     Serial.print("I received: ");
     while (Serial.available() > 0) {
           
for (int i = 0; i < sizeof(myStr) - 1; i++)
{
 incomingByte = Serial.read();
  myStr[i]=incomingByte;
  Serial.print(myStr[i]);
}
}
}



Ensuite j'envoie les valeurs sur le serial monitor.
Les valeurs s'affichent correctement comme ce qui sort de la première plaque, la mention "I received: " ne s'affiche qu'une fois, ce qui indique que je suis enfermé dans la boucle While et que même avec le '\0' je n'en sort pas...

Ce qui me préocuppe pour le moment c'est que je n'arrive pas à récupérer les données du flux reçu afin de les convertir en variable exploitable.

J'aimerais par exemple pouvoir utiliser la valeur des t/min mais je n'arrive pas à séparer cette valeur du reste du flux.
En plus comme les valeurs varient et passent d'unités à dizaines, centaines, ça ne facilite pas.

J'ai essayé plusieurs choses différentes (que je ne poste pas car c'est totalement inexploitable).
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Vincent

Le problème je pense c'est que la liaison USB utilise déjà la liaison série de l'Arduino, du coup l'utiliser pour communiquer avec l'ordi et avec une autre Arduino ça doit pas le faire

Jean-François

#2
Mar 15, 2009, 01:55 pm Last Edit: Jan 07, 2013, 07:54 pm by Jean-François Reason: 1
Si,si, ça fonctionne (du moins dans ce cas), ce qui est affiché est exactement similaire si je suis directement sur celle qui lit la roue codeuse ou si j'ai la deuxième plaque en intermédiaire.
Mon problème réside surtout dans le fait que je ne sais pas  comment convertir le flux (string ?) en un valeur ( int, long..) exploitable.

Pour l'instant ça ne fait qu'aligner les bytes tels quels, j'aimerais pouvoir les remettre dans la même configuration qu'avant l'envoi.
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Jean-François

Dans mes essais actuels j'essaye de séparer les valeurs qui m'intéresse en les envoyant entre des balises.
Par exemple, la valeur "time" envoyée par Arduino-1 est précédée par 'T' et suivie de 'U'.

Je pensais la séparer du reste en utilisant un code comme cela :

Code: [Select]

char time;
char value;

void setup() {
 Serial.begin(38400);
}

void loop() {

 while (Serial.available() > 0) {
   
   value = Serial.read();
   
   if (value =='T'){
     while (value !='U'){
       value = Serial.read();
       time = value;
       if (value !='U'){
       Serial.print(time);
       }
     }
     Serial.println();
   }
 }
}




Pour ensuite mettre la valeur "time" dans un tableau dont j'additionnerais les "cases" en le lisant depuis la fin en multipliant par 1000, 100, 10 suivant la position du chiffre dans la valeur affichée à la fin.

Pour l'instant j'ai bien la valeur "time" qui s'affiche selon la progression de millis(), mais les chiffres sont précédés de trois " ÿ " comme cela :

Code: [Select]
ÿÿÿ641735
ÿÿÿ641752
ÿÿÿ641769
ÿÿÿ641786
ÿÿÿ641804
ÿÿÿ641821
ÿÿÿ641838
ÿÿÿ641855

Je n'arrive pas à trouver d'où ils viennent.
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Luj06

C'est ton println peut-être (caractère \r ou \n).
Mais je connais bien ce caractère (ÿ), je le vois souvent passer dans mes logs série, je me demande si c'est pas plutôt 0xFF

Go Up