Plusieurs remarques
char floatStr[50];
char floatStr1[50];
float amps;
float volts;
sscanf((char*)buf, " %f ; %f ", floatStr, floatStr1);
amps=atof(floatStr);
volts=atof(floatStr1);
floatStr et floatStr1 devraient être de type float puisque tu demandes d'extraire des flottants (d'ailleurs, le compilateur remonte un warning à ce sujet). Normalement, c'est le scanf qui fait la conversion et du coup le atof que tu ajoutes derrière est inutiles.
Le code corrigé serait comme ça. A noter howmany qui retourne le nombre de valeurs trouvées par sscanf (avec le code erroné howmany = 0)
float amps;
float volts;
int howmany=sscanf((char*)buf, " %f ; %f ", &s, &volts);
Mais surtout, le support des flottants n'est pas implémenté pour cette fonction car trop gourmand en ressources.
Tu peux t'en convaincre en changeant le type des données que tu manipules. il suffit de remplacer les float par des unsigned int par exemple et là ça marche (et howmany retourne 2)
uint16_t amps;
uint16_t volts;
int howmany=sscanf((char*)buf, " %u ; %u ", &s, &volts);
Pour règler ton problème, tu peux:
soit le faire à la main
- lire jusqu'au séparateur et faire un atof
- lire la suite et faire un atof
ou alors utiliser
strtok qui est plus puissant mais un peu usine à gaz si tu ne veux extraire que 2 nombres.