Il est important de comprendre que Serial.find(255) n'attend qu'une seconde par défaut - le timeout peut être réglé Dans le setup avec un appel à
setTimeout()donc il serait bien de faire
If (Serial.find(255)) {...}
Plutôt que de croire aveuglément qu'on a bien reçu 255 une fois que l'appel à la fonction retourne.
De même
Serial.readBytes (buffer + 1, sizeof(buffer) - 1);
Peut retourner avant d'avoir lu les 26 octets si timeout
Le mieux c'est vraiment d'avoir un index x (initialisé à 0), et un booléen de début de trame qui indiquera si on a reçu le premier 255 (initialisé à faux)
créer un boucle générale infinie qui contient:
si une donnée est dispo sur la ligne série
On lit 1 caractère (byte)
Si on a déjà reçu 255 (test du booléen)
rajouter le caractère au buffer en position x,
passer à x+1,
si x vaut 26 alors on a tout reçu on fait un break; pour sortir de la boucle infinie
Sinon on n'a pas encore reçu 255 alors
on teste si le caractère reçu vaut 255 et si oui
on met le booléen vrai pour dire que c'est bon on a reçu 255,
on met x à 0
et sinon on ne fait rien et on retourne à la boucle infinie en attente du prochain charactere
L'amélioration suivante de cet algorithme c'est de rajouter la gestion d'un temps d'attente max éventuellement au début de la boucle infinie et faire un break si le temps max est atteint avec bien sûr un booléen supplémentaire qui dira qu'on n'a pas tout reçu alors que si on a bien tout reçu on le met à vrai
Voilà - reste plus qu'à coder
Vous essayez?