décomposition d'une chaine en variables uint8_t

ces merveilles ;o))
J-M-L, tant que vous etes là, j'ai continué à chercher et j'ai voulu ajouter à votre code

byte emetteur = 0,destinataire=1,heureCourante=8,minCourante=30,secCourante=0,hUp=8,minUp=0,autoUp=1,hDown=19,minDown=15,autoDown=0,checksum=10;
char transmissionVolets[] = "$,10,20,30,40,50,60,70,80,90,95,99*";
char transVolets[]="$,10,20,30,40,50,60,70,80,90,95,99*";
const char * virgule = ",";

union { // http://en.cppreference.com/w/cpp/language/union
  byte val[12];
  struct {
    byte emetteur, destinataire, heureCourante, minCourante, secCourante, hUp, minUp, autoUp, hDown, minDown, autoDown,checksum;
  } data;
} valeurs;

void compositionMessage()
{
// char transVolets[40];
  // int e,d,hC,mC,sC,hU,mU,aU,hD,mD,aD=0;
  char *p;
  sprintf(transVolets,"$,%d,%d,%2d,%2d,%2d,%2d,%2d,%d,%2d,%2d,%d*",
          emetteur,destinataire,heureCourante,minCourante,secCourante,hUp,minUp,autoUp,hDown,minDown,autoDown);
          for (p=transVolets+5; *p; p++) // calcule le checksum sans tenir compte des 6 premiers caracteres
 checksum^=(byte) *p;
 sprintf(p,"%02X",checksum); // ajoute le checksum et le code de fin

 Serial.print ("transVolets après checksum = ");
 Serial.println (transVolets);
 Serial.print ("checksum =");Serial.println (checksum);
 
 }

void receptionMessage()
{
  Serial.print ("transVolets recu ");
 Serial.println (transVolets);
  char *p;
  byte i;
 // p = strtok(transmissionVolets, virgule); // http://en.cppreference.com/w/cpp/string/byte/strtok
 p = strtok(transVolets, virgule); // http://en.cppreference.com/w/cpp/string/byte/strtok

  if ((p != NULL) && (*p == '

le checksum,si je laisse le"" à la fin de ma chaine, le checksum reste à 0, si je remplace "" par "," ca marche et la solution devient possible.
j'essaie de modifier la boucle pour que ce qu'il y a derrière l'astérisque soit prise en compte , j'arrive pas (vous voyez à quel point je suis nul)
pouvez m'aider à faire cette modif s'il vous plait ?
Merci
)) {
    i = 0;
    do {
      p = strtok(NULL, virgule);
      valeurs.val[i++] = atoi(p); // std::atoi, std::atol, std::atoll - cppreference.com
    } while (p && (i < sizeof(valeurs)));

if (i == sizeof(valeurs)) {
      Serial.println("les variables sont :");
      Serial.println(valeurs.data.emetteur);
      Serial.println(valeurs.data.destinataire);
      Serial.println(valeurs.data.heureCourante);
      Serial.println(valeurs.data.minCourante);
      Serial.println(valeurs.data.secCourante);
      Serial.println(valeurs.data.hUp);
      Serial.println(valeurs.data.minUp);
      Serial.println(valeurs.data.autoUp);
      Serial.println(valeurs.data.hDown);
      Serial.println(valeurs.data.minDown);
      Serial.println(valeurs.data.autoDown);
      Serial.println(valeurs.data.checksum);
    }
  }
}

void setup() {
  Serial.begin(9600);
  compositionMessage();
  receptionMessage();
}

void loop()
{
  }


le checksum,si je laisse le"*" à la fin de ma chaine, le checksum reste à 0, si je remplace "*" par "," ca marche et la solution devient possible.
j'essaie de modifier la boucle pour que ce qu'il y a derrière l'astérisque soit prise en compte , j'arrive pas (vous voyez à quel point je suis nul)
pouvez m'aider à faire cette modif s'il vous plait ?
Merci