Extraire des valeurs d'un port série

Bonjour,

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()

OK merci , je vais tester

Bonjour,

Comme le dit biggil, il faut lire le message dans un buffer puis l'analyser. Tu peux utiliser readBytesUntil().

void loop() {
  char buf[30];
  if (Serial3.available())
  {
    int n=Serial3.readBytesUntil('>',buf,sizeof buf-1);
    buf[n]=0;           // fin de la chaine
    
    float v1=atof(buf);
    char *p=strchr(buf,',');
    float v2=atof(p+1);
    Serial.print(v1);
    Serial.print(" ");
    Serial.println(v2);
  }
}

Tu es un seigneur , merci beaucoup. Je vais tester directement lundi