Bon j'avais vraiment rien à faire pour m'occuper :*
Donc ...
#define TAILLE_MAX 32
char texte[TAILLE_MAX / 2], unite;
int valeur, index, diviseur;
void setup() {
Serial.begin(9600);
}
void loop() {
if(recupInfo(texte, &valeur, &index, &diviseur, &unite)) {
Serial.println("Erreur de trame !");
return;
}
Serial.print("Texte: ");
Serial.println(texte);
Serial.print("Valeur: ");
Serial.println(valeur);
Serial.print("Index: ");
Serial.println(index);
Serial.print("Diviseur: ");
Serial.println(diviseur);
Serial.print("Unité: ");
Serial.println(unite);
}
/*
* Parse une chaine au format $ texte;valeur;index;diviseur;°c/f;
* Et retourne la valeur des differents champs.
*/
int recupInfo(char *texte, int *valeur, int *index, int *diviseur, char *unite) {
char c, buf[TAILLE_MAX + 1];
unsigned char i = 0;
/* Attente du $ espace */
do {
/* Attente de 2 char sur le port série */
while(Serial.available() < 2);
/* Tant que chaine != $ espace -> boucle */
}
while(Serial.read() != '
Test et regarde si ça marche 
(J'ai pas le matos pour tester sous la main) && Serial.read() != ' ');
/* Remplissage du buffer /
do{
/ Si la chaine a dépassé la taille max du buffer*/
if(i == (TAILLE_MAX + 1))
/* retourne 1 -> erreur */
return 1;
/* Attente d'un char sur le port série */
while(Serial.available() < 1);
/* Tant que char != 0x1A (fléche) -> boucle */
}
while((buf[i++] = Serial.read()) != 0x1A);
/* Cloture la chaine de char */
buf[i] = '\0';
/* Copie le texte au début de buf[] dans texte[] */
i = 0;
while((texte[i] = buf[i]) != ';') i++;
texte[i] = '\0';
/* Parse la chaine de caractére et extrait les champs /
if(sscanf(buf + i, ";%d;%d;%d;%c%c;", valeur, index, diviseur, unite) != 4)
/ Si sscanf n'as pas pu extraire les 4 champs -> erreur/
return 1;
/* retourne 0 -> pas d'erreur */
return 0;
}
Test et regarde si ça marche ;)
(J'ai pas le matos pour tester sous la main)