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ð
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:
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é.
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"
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.