Problème déclaration de variable et/ou strtok pour pouvoir splitter une chaîne

Bonjour,
je commence un projet dans lequel je veux commander des relais depuis un raspberry vers un arduino nano, j'ai suivi ce tuto et ca fonctionne mais le code ne sert qu'à commander une seule led et j'ai besoin d'en commander 2 (que je remplacerai après par les relais).
Dans un premier temps j'ai modifié le code de l'arduino et je commande mes deux leds en changeant l'ID mais cette solution ne me convient pas complètement, je préfèrerais pouvoir gérer les messages envoyés de cette façon :
LED1 ON, LED2 ON, LED1 OFF .... get LED1 ...

j'essaie donc de splitter le message reçu :

/*  TEST split */
char* mess_recu = incoming.message;
Serial.println(mess_recu);
char* Temp1 = strtok(mess_recu, " "); 
char* Temp2 = strtok(NULL, " "); 
Serial.println(Temp1);
Serial.println(Temp2);
Serial.println(incoming.message);
Serial.println(mess_recu);

=> voici ce qu'affiche le code dans le moniteur quand j'envoie le message "LED1 on" :
LED1 on
LED1
on
LED1
LED1

Temp1 et Temp2 renvoient bien ce que j'attends mais incoming.message et mess_recu ne contiennent plus que la première partie du message envoyé alors que je ne fais pas d'action sur ces chaînes.

J'ai essayé également comme cela en changeant les déclaration des variables :

/*  TEST split */
char mess_recu = incoming.message;
Serial.print (" mess_recu avant strtok: ");
Serial.println(mess_recu);

char Temp1 = strtok(mess_recu, " "); 
char Temp2 = strtok(NULL, " "); 

Serial.print (" incoming.message apres strtok: ");
Serial.println(incoming.message);
Serial.print (" variable mess_recu apres strtok: ");
Serial.println(mess_recu);
Serial.print (" Temp1: ");
Serial.println(Temp1);
Serial.print (" Temp2: ");
Serial.println(Temp2);

=> voilà ce qui est alors affiché dans le moniteur :
 mess_recu avant strtok: X
 incoming.message apres strtok: LED1 on
 variable mess_recu apres strtok: X
 Temp1: X
 Temp2:

Ce coup-ci c'est mess_recu qui ne prends pas la valeur de incoming.message.
J'avoue que je suis un peu perdu avec tout cela, ess ce que le pb vient de la façon dont j'utilise strtok ou de la déclaration des variables ?
merci d'avance

Bonjour,

C'est un des problèmes de strtok, il modifie la chaîne passée en paramètre (il met des \0 à la place des séparateurs).

Merci pour la réponse,
comment contourner ce pb ?
ou alors quelle fonction utiliser ?

le plus simple: tu dupliques le message et tu travailles sur la copie

char* mess_recu = incoming.message;
char * dmess=strdup(mess_recu); // duplique le message
Serial.println(mess_recu);
char* Temp1 = strtok(dmess, " "); 
char* Temp2 = strtok(NULL, " "); 
Serial.println(Temp1);
Serial.println(Temp2);
Serial.println(incoming.message);
Serial.println(mess_recu);
free(dmess);

Ne pas oublier le free à la fin

Ou tu utilises strchr et tu dois extraire les sous-chaines

Ou tu utilises la classe String qui fourni des fonctions de recherche et d'extraction de sous-chaines.

merci kamill, je pensais que

char* mess_recu = incoming.message;

dupliquait le message d'où ma méprise, merci pour ta réponse, je vais tenter cela ce soir.

Cela fonctionne bien en dupliquant le message, merci kamill