hbachetti:
Recherche simplement le caractère '=' avec strchr().
Ajoute +1 au pointeur et utilise sscanf pour convertir en entier.
Même si ça fonctionne, dans l'absolu il vaut mieux éviter sscanf()
ça ajoute massivement à la taille de votre binaire
si vous regardez ce programme
char message[] = "DATA=123\r\n";
void setup() {
int valeur;
Serial.begin(115200);
sscanf(message, "DATA=%d", &valeur); // http://www.cplusplus.com/reference/cstdio/sscanf/
Serial.println(valeur);
}
void loop() {}
la compilation (sur un UNO ici) dira
Sketch uses 3562 bytes (11%) of program storage space
Si vous faites par contre
char message[] = "DATA=123\r\n";
void setup() {
int valeur;
Serial.begin(115200);
valeur = atoi(message + 5); // http://www.cplusplus.com/reference/cstdlib/atoi/?kw=atoi
Serial.println(valeur);
}
void loop() {}
la compilation (sur un UNO ici) dira
Sketch uses 1822 bytes (5%) of program storage space
--> l'usage de sscanf()
vous coûte 1740 octets de mémoire programme.
bien sûr il faut traiter les erreurs, ce que je n'ai pas fait dans les exemples ci dessus. comme ici les données sont simples, un petit travail manuel permet de traiter cela et on gagne encore en mémoire:
char message[] = "DATA=123\r\n";
boolean lireData(int &data)
{
boolean erreur = true;
size_t i = 0;
while ((message[i] != '\0') && (message[i] != '=')) i++; // on cherche le '='
if (message[i] == '=') { // si on l'a trouvé
i++; // on passe au caractère suivant
if ((message[i] >= '0') && (message[i] <= '9')) { // si c'est bien un chiffre
data = 0; // on initialise notre valeur
erreur = false; // on sait que la lecture retournera au moins queqlue chose de correct
while ((message[i] != '\0') && (message[i] >= '0') && (message[i] <= '9')) {
data = data * 10 + (message[i++] - '0'); // on construit notre entier
}
}
}
return erreur;
}
void setup() {
int valeur = 0;
Serial.begin(115200);
if (!lireData(valeur)) Serial.println(valeur);
}
void loop() {}
donc ici non seulement on teste si le format est correct mais on a encore gratté un peu de mémoire (44 octets ! :-)) , la compilation (sur un UNO ici) dira
Sketch uses 1778 bytes (5%) of program storage space.