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