Merci pour les informations et vos retours.
sinon, concernant le code suivant : cela fonctionne très bien. J'ai placé pas mal de serial.print à l'intérieur pour comprendre plus exactement sont fonctionnement.
voici le code en question :
/*************************************************************
PROGRAMME DE DECODAGE D'UNE TRAME DU TYPE : /N°broche*consigne : exemple /9*126 = sur broche 9 consigne 126°
**************************************************************/
// --- Déclaration des variables globales ---
/*
la trame sera formaté ainsi : <1;-3;16;2294;531>
'<' = le debut de la trame
'>' = la fin de la trame
';' = délimiteur des donnees
*/
//----------
String Trame; // Chaine pour contenir la Trame entrante
boolean TrameRecu = false; // si la Trame a été reçue dans son intégralité : Tramereçu sera = true
int NbrData = 4; // NbrData = nombre de données reçues exemple: 5 valeurs : 1;-3;16;2294;531 de 0 à 4 = 5 valeurs
void setup()
{
Serial.begin(115200);
}
//========================
void loop()
{
handleCommand();//appel de la fonction
} //FIN LOOP
//=======================
//************************* routines sur événement sérial
void serialEvent()
{
while (Serial.available()) // tant que je reçois une donnée
{
char incomingByte = (char)Serial.read();//le byte entrant sera chargé dans la variable incomingByte
if (incomingByte == '>') // si valeur d'arrivée = '>' = fin de la Trame
{
TrameRecu = true; // alors TrameRecu = true
return;
}
else if (incomingByte == '<')// si valeur d'arrivée = '<' = début de Trame
{
Trame = ""; // Trame = vide
TrameRecu = false; // TrameRecu = false
return;
}
else //si valeur d'arrivée != '<' ET valeur d'arrivée != '>'
{
Trame += incomingByte; // concaténation de trame avec les valeurs reçues soit ici : 1;-3;16;2294;531
return;
}
}//fin de while (Serial.available())
} // fin de void serialEvent()
void handleCommand()
{
if (!TrameRecu) return; // Si Tramereçu = false, alors aucune Trame a parser je quitte
int data[NbrData]; // tableau d'entier de la taille NbrData = 4. de 0 à 4 -> 5 nombres.
char cmd[Trame.length()+1]; // tableau de char de la taille du string Trame +1 (caractère de fin de ligne). Ce +1 OBLIGATOIRE ?
Serial.print("Trame = "); Serial.println(Trame);
Serial.print("Trame.length() "); Serial.println(Trame.length());
Serial.print("Trame.length()+1 "); Serial.println(Trame.length()+1);
Trame.toCharArray(cmd, Trame.length()+1);// récupère chaque valeur de Trame dans un tableau cmd de tailleTrame.length()+1)
char *token = strtok(cmd, ";"); // *token, c'est un pointeur, strtok(cmd, ";")->split le tableau cmd en fonction de cmd !!! COMPRENDS PAS ???
Serial.print("*token = "); Serial.println(*token);
for (int b = 0; b < Trame.length()+1; b++)
{
Serial.print("cmd[b]"); Serial.println(cmd[b]);
}
for (int i = 0; i < NbrData+1; i++) // place de toute les valeurs dans les valeurs dans le tableau data[i]
{
if (token) //COMPRENDS PAS ???
{
Serial.print("token = "); Serial.println(token);
data[i] = atoi(token); //converti valeur en variable int pour pouvoir l'utiliser
token = strtok(NULL, ";");//COMPRENDS PAS ???
Serial.print("*token-next = "); Serial.println(*token);
}
else
{
Serial.print("!token = "); Serial.println(token);
}
}
//---Pour verif sur monitor de ce qui a été reçu
Serial.print("data[0] = "); Serial.println(data[0]);
Serial.print("data[1] = "); Serial.println(data[1]);
Serial.print("data[2] = ");Serial.println(data[2]);
Serial.print("data[3] = ");Serial.println(data[3]);
Serial.print("data[4] = ");Serial.println(data[4]);
TrameRecu = false;// Drapeau pour dire que nous avons traite la commande
}
//************************Fin routines
*****************************************
la trame envoyée : <12;34;56;78;99>
Le résultat :
Trame = 12;34;56;78;99
Trame.length() = 14
Trame.length()+1 = 15
*token = 1 //position du première pointeur
cmd[b]1
cmd[b]2
cmd[b] //il manque tjrs le ; ici ???
cmd[b]3
cmd[b]4
cmd[b];
cmd[b]5
cmd[b]6
cmd[b];
cmd[b]7
cmd[b]8
cmd[b];
cmd[b]9
cmd[b]9
cmd[b] //forcément puisque cmd[Trame.length()+1], Trame.length() = 14
token = 12 //première valeur
*token-next = 3 //pointeur
token = 34 //deuxième valeur
*token-next = 5 //pointeur
token = 56 //troisième jvaleur
*token-next = 7 //pointeur
token = 78 //quatrième valeur
*token-next = 9 //pointeur
token = 99 //cinquième valeur
*token-next =
****************Les valeurs dans le tableau data
data[0] = 12
data[1] = 34
data[2] = 56
data[3] = 78
data[4] = 99
OK alors !!!!