Lecture du buf

Bonjour, j'ai quelques problèmes à la lecture du buf.
Je réceptionne bien l'information correct, mais je voudrais lire le buf pour le comparer à une chaine de caractères, pour pouvoir donner un ordre (allumer ou éteindre une led).
Hors la lecture du buf ne correspond pas toujours à la réception.
Pouvez-vous me dire ou est mon erreur.

Je vous joins une partie du code et le résultat.

Si ce sujet à déjà était traité merci de m'adresser le lien.

Cordialement.
Marc.

//*****Emetteur****
void Heure_Emetteur()
{
  char str[7];// Chaine de 7 caractère utile + 1 nul (non visible) 
  sprintf( str, "%02luh:%02lum", Heure, Minute);
  vw_send((uint8_t *)str, strlen(str)); // On envoie le message
  vw_wait_tx(); // On attend la fin de l'envoi
//*********Recepteur*********************
void loop() // Fonction loop()
{ 
  byte buf[VW_MAX_MESSAGE_LEN]; // Tableau qui va contenir le message reçu (de taille maximum VW_MAX_MESSAGE_LEN)
  byte buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau
  
  if (vw_wait_rx_max(200)) // Si un message est reçu dans les 200ms qui viennent
  {
    if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non dans le buffer
    {
     Serial.print("Reception : ");
      for (byte i = 0; i < buflen; i++)
      { 
        Serial.write(buf[i]);// Affichage du message sur PC
        a=i; // comptage nb caracteres
      }
      a=a+1;
      Serial.println("");
      Serial.print("nb caracteres: ");
      Serial.print(a);
      Serial.println("");
      Serial.print("lecture du buf : ");
      Serial.print((char*)buf);

Moniteur

Reception : 15h:06m
nb caracteres: 7
lecture du buf : 15h:06m
Reception : 15h:06m
nb caracteres: 7
lecture du buf : 15h:06m
Reception : 15h:06m
nb caracteres: 7
lecture du buf : 15h:06mð
Reception : 15h:06m
nb caracteres: 7
lecture du buf : 15h:06mð
Reception : 15h:06m
nb caracteres: 7
lecture du buf : 15h:06mð
Reception : 15h:06m
nb caracteres: 7
lecture du buf : 15h:06mð

Cela me semble correct : le sprintf va lire tout le buf, y compris les caractères non initialisés.

Si tu veux que le sprintf soit correct, tu dois faire "buf[buflen] = 0;"

  char str[7];// Chaine de 7 caractère utile + 1 nul (non visible) 
  sprintf( str, "%02luh:%02lum", Heure, Minute);

Le buffer str n'est pas assez grand.
l'heure est sur 7 caractères auxquels il faut ajouter un terminateur\0 (d'ailleurs c'est ce que tu as écrit dans le commentaire).
Donc il faudrait définir str comme ça:

  char str[8];// Chaine de 7 caractère utile + 1 nul (non visible)

à XavierMiller

Merci ou placer l'expression "buf[buflen] = 0;".

à fdufnews

Merci, j'ai mis l'expression

" char str[8];// Chaine de 7 caractère utile + 1 nul (non visible) ".
le résultat n'est pas concluent.

Reception : 16h:18m
nb caracteres: 7
lecture du buf : 16h:18m
Reception : 16h:18m
nb caracteres: 7
lecture du buf : 16h:18mÌÀ
Reception : 16h:18m
nb caracteres: 7
lecture du buf : 16h:18mÌÀ
Reception : 16h:18m
nb caracteres: 7
lecture du buf : 16h:18mÌÀ
Reception : 16h:18m
nb caracteres: 7
lecture du buf : 16h:18mÌÀ
Reception : 16h:18m
nb caracteres: 7
lecture du buf : 16h:18mÌÀ

Le '\0' est nécessaire si on imprime avec un print or là l'affichage de l'heure est réalisé par la boucle ci-dessous

      for (byte i = 0; i < buflen; i++)
      { 
        Serial.write(buf[i]);// Affichage du message sur PC
        a=i; // comptage nb caracteres
      }

Si tu as des caractères en trop c'est que buflen ne reflète pas la longueur de la chaîne.
Dans le morceau de code que tu donnes on ne voit pas comment buflen est affecté.

fdufnews:
Dans le morceau de code que tu donnes on ne voit pas comment buflen est affecté.

Normalement c'est fait ici :

(vw_get_message(buf, &buflen)

Effectivement je n'avais pas vu.
3 possibilités donc:
soit vw_get_message() retourne une mauvaise valeur pour la longueur
soit l'émetteur envoie une chaîne plus longue que prévue
soit il y a une "erreur de transmission"

Ce qui n'est pas cohérent c'est que la variable a est bonne, comment expliqué ça ?

VW_MAX_MESSAGE_LEN est défini à combien ?

Bonjour,
J'ai trouvé ici "Accueil []" par hasard sur le net, une autre façon de lire le buf qui rejoint la réponse de XavierMiller .
J'ai fait le test est apparemment c'est OK, quelques sauts de lecture blanc sans gravités puisque j'envoie l'information toutes les 3 secondes.

qu'en pensez-vous?

Merci à tous pour votre aide.
Marc.