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.