Communication xBee : envoie de multiples valeurs

Bonjour / Bonsoir à tous !

Dans le cadre d'un projet pour le bac je tente de réaliser un robot télécommandé. Pour cela, je dois créer une télécommande (en même temps ^^) et un récepteur. J'utilise pour cela comme vous l'avez vu dans le titre des xBee. Le problème est que les xBee ne peuvent transmettre qu'une seule valeur à la fois, or je dois en transmettre trois. J'ai donc au l'idée d'envoyer un string compactant les données en une seule variable que je transmet via xBee. Le message transmit est de la forme suivant :

e1x0y0f

e : Marqueur de début
1 : Variable de type booléenne, indiquant si le robot doit être actif ou non.
x : Marqueur
0 : Valeur x du joystick
y : Marqueur
0 : Valeur y du joystick
f : Marqueur de fin

Le carte réceptrice reçoit bien le message sous cette forme. Ma question est donc, comment puis-je décomposer le string reçu pour recréer mes variables e, x et y ?

Voici la code d'envoi des données. La variable e est définie dans une autre fonction du programme.

void joystick() {

  x = analogRead(JOYX) - 509;
  y = analogRead(JOYY) - 508;
  data = String("e" + String(enable) + "x" + String(x) + "y" + String(y) + "f");
  xbee.println(data)
}

Et voici ma tentative de code de réception pour stocker le string dans un tableau de char, mais cela ne fonctionne pas :

void loop()
{
  data = xbee.read();
  char disp[data.length() + 1]; // tableau de char de la taille du String param+1 (caractère de fin de ligne)
  data.toCharArray(disp, data.length() + 1); // récupère le param dans le tableau de char
  Serial.print("Valeur de disp : ");
  Serial.println(disp);
  Serial.print("Longueur de disp : ");
  Serial.println(data.length());
}

Quand au moniteur série du récepteur, il affiche ceci :

Longueur de disp : 3
Valeur de disp : 48

Alors que dans le cas où x et y valent 0, je me serai attendu à

Longueur de disp : 7
Valeur de disp : e1x0y0f

Merci à ceux qui tenteront de m'aider !

EDIT :

Il semblerait que la xBee réceptrice transforme le String reçu en un nombre. Or, lorsque j'essaye de lire directement la valeur reçu via :
Serial.println(xbee.read());
La valeur s'affiche correctement sur le moniteur série, mais ne peut donc pas être stockée.

Tu peux essayer de mettre la donnée lue dans un String et utiliser StringIndexOf pour chercher tes codes 'x', 'y' et 'f'. Substring fera le reste.Pour convertir les valeurs en int : toInt.

Merci à toi ! Cependant nous sommes toujours face au problème de la réception. En effet, l'xBee semble recevoir une valeur int au lieu du String qui est émis.

Voici le code que j'ai tenté de faire :

  String data = xbee.read();
  int me = data.indexOf('e');
  int mx = data.indexOf('x');
  int my = data.indexOf('y');
  int mf = data.indexOf('f');
  String se = data.substring(me + 1, mx - 1);
  String sx = data.substring(mx + 1, my - 1);
  String sy = data.substring(my + 1, mf - 1);
  int e = se.toInt();
  int x = sx.toInt();
  int y = sy.toInt()
}

Mais voici le code d'erreur que me donne le logiciel Arduino :

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:59:2: note:   no known conversion for argument 1 from 'int' to 'const char*'

exit status 1
conversion from 'int' to 'String' is ambiguous

Pas la peine de cherche le ‘e’ : il est à la place numéro 0.
Fais afficher ‘data’ et les valeurs de mx, my et mf pour voir si tu les utilises correctement

Au passage, mets dans ton prochain message le résultat de cet affichage.

Étant donné que d'autres groupes utilisent des xBee à proximité, le e le servirà d'identifiant unique pour les données.
Quand j'utilise :
Serial.print(xBee.read());
J'obtiens :
????????e1x0y0f (avec les points d'interrogation en miroir)
Mais avec :
Serial.print(data)
J'ai :
101 (ou un autre nombre, mais 101 revient souvent)

xBee.read() renvoie soit un byte soit un char. Dans ton cas, tu dois affecter le résultat à un tableau de char et le mettre dans un String pour faire les recherches ensuite.
Peux-tu éditer ton message précédent et mettre la ligne avec les '?' entre balises CODE afin qu'on voie mieux ? Merci

Tu dois pouvoir adapter le cinquième exemple de ce post à ton besoin (mais lis l'ensemble pour bien comprendre).

Bonjour, désolé de répondre si tard, je n'avais pas accès au matériel. Tout fonctionne comme je le souhaite grâce à ce que tu m'as envoyé, je te remercie !