tu me dis :
"trame à une longueur 8 or i varie de 0 à longueur donc tu écris en dehors de trame[]"
il me semble que la boucle for va de 0 à 7 puis 8 à 15 etc ...
donc le test :
if (i > longueur) trame = 0; sert à finir de remplir la dernière trame de 8 octets je pense ??? ok et merci pour les 2 derniers points
comme tu dis ta boucle for va de 0 à 7 puis 8 à 15 ... donc que tu fais trame[i] = messages[i]; tu écris dans trame[8], trame[9] ... ce qui est complètement en dehors de trame[]
Je ne sais pas ce que fait trame=0 les variables n'étant pas du même type. Normalement le compilateur devrait le refuser.
N’utilisez pas la classe String sur un petit arduino. Vous vous exposez à des déconvenues pour des plus gros programmes. Utiliser le bêtes cStrings (tableau de caractères terminé par ‘\0’) et les fonctions standard comme itoa(), strcat(), strcpy() pour construire la chaîne et pour découper en morceaux il suffit juste de parcourir la cString avec un pointeur
Un truc du genre:
enum identification_t : int {idDate = 480, idHeure = 1282, idTemp = 1281};
void envoiMessages(identification_t ident, const char * message)
{
const byte tailleMaxEmmission = 8;
char bufferMessage[tailleMaxEmmission + 1]; // +1 pour le caractère null à la fin de la cString
size_t longeurMessage = strlen(message);
bufferMessage[tailleMaxEmmission] = '\0'; // le buffer sera comme cela toujours une cString bien terminée
Serial.print(F("Decoupage de ["));
Serial.print(message);
Serial.println(F("]"));
for (size_t i = 0; i < longeurMessage; i += tailleMaxEmmission) {
strncpy(bufferMessage, message + i, tailleMaxEmmission);
Serial.print(F("trame #"));
Serial.print(i / tailleMaxEmmission);
Serial.print(F(", identifcation #"));
Serial.print(ident);
Serial.print(F(", trame = {"));
Serial.print(bufferMessage);
Serial.println(F("}"));
}
Serial.println();
}
void setup() {
Serial.begin(115200);
envoiMessages(idDate, "Jeudi 08 novembre 2018");
envoiMessages(idHeure, "15:05:30");
envoiMessages(idTemp, "25");
}
void loop() {}