je transmets deux valeurs sur mon port Serial3 de mon Arduino Mega via module XBEE.
J'aimerai récupérer les deux valeurs dans deux float:
Voici mon code: void loop() { char a; while(Serial3.available()>0) { a=Serial3.read(); Serial.print(a); } }
et j'obtiens:
43626208.00,804305728.00>
J'ai fais exprès de mettre une virgule comme séparateur et ">" pour la fin de ma trame.
Mais pour le moment impossible de lire QU'UNE seul fois ma trame -> récupérer les deux valeurs -> traitement -> relire ma trame etc...
Si une personne a une idée svp.
Mets les caractères reçus dans un buffet, l'un derrière l'autre.
Quant tu a reçu tous les caractères pour une valeur, ajoute un zéro (la valeur 0, pas le caractère '0' !) au bout et utilise la fonction C atof pour convertir les caractères en un double.
Ca c'est clair, ce qui ne l'est pas c'est comment tu sais que tu a reçu le dernier caractère d'une valeur.
Y-a-t-il un silence entre deux valeurs ? le nombre de chiffres après la virgule (le point en fait) est-il constant ? Peux tu, du côté de l'émetteur, ajouter un caractère identifiable comme fin de chaîne (comme la virgule dans ton post) ?
Il y a plusieurs solutions, à toi de voir.
Merci pour ta réponse . C'est moi qui envoie ces valeurs : j'envoie deux floats ( raison du .00) , je les sépare avec la virgule et j'envoie le > pour la fin de chaîne.
Si j'écris :
A= Serial3.read();
buffer[indice] = A;
indice++;
Pour le moment je je remplie mon buffer . Mais comment séparer les deux valeurs ? Avec un for ?
A chaque caractère reçu, avant de l'ajouter au Buffet, tu le testes.
Si c'est c'est une virgule, tu peux lire ta 1ère valeur avec atof(), et tu réinitialises indice à zéro.
Si c'est c'est un <, tu peux lire ta 2nde valeur avec atof(), et tu réinitialises indice à zéro.
N'oublie pas de rajouter un octet nul au Buffet avant d'utiliser atof()