Lecture d'une variable

Bonjour,

Je rencontre un problème sur lequel je tourne en rond.
Sur un Arduino, j'ai un émetteur 433Mhz et sur un autre Arduino, il y a le récepteur.
Depuis l'émetteur, j'envoie le message "1-2" avec le code suivant:

void loop()
{
   const char *msg = "1-2";              
   vw_send((uint8_t *)msg, strlen(msg));
   vw_wait_tx();                                   
   delay(10000);                                    
}

Pour le récepteur, j'ai le code:

void loop()
{
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  char i;

  if (vw_get_message(buf, &buflen)) 
  {
    //     // Un message est reçu.

    if (buf[i] == '1-2')
    {
	//code non execute
	
    }
    else
    {
  }

Depuis le récepteur, le Moniteur(avec un autre bout de code) reçoit bien 1-2.
Par contre, mon code après le if ne s'éxecute pas.
Il me semble que cela provient du char i. J'ai modifié avec String mais j'ai une erreur à la compilation.
J'ai testé avec simple cote, doule cote, parenthèses...y a rien à faire.

Je dois avoir une mauvaise approche sur les variable i et buf mais je n'arrive pas à trouver.

Avez-vous une idée ?

Merci

utilise strcmp pour comparer des chaînes de caractères.
En tous cas, la partie '1-2' est erronnée car ce n'est pas une chaîne de caractères, mais le caractère '1'.

bonsoir Earvino,

pour char i; il vaut peut-être mieux le déclarer en tableau:

char i[3]; 3 étant le nombre de caractère, ensuite il faut affecter la valeur reçu à i.

Pour le tableau, je ne suis pas sûre, mais pour l' affectation, déjà un peu plus.

Si ça peux t' aider...

sinon tu peux rajouter la parti avec le if qui ne s' exécute pas...

J'ai essayé plusieurs choses:

  • avec un Serial.write(buf*) et en déclarant char i[0] puis char i[1].., j'ai vérifié que je pouvais lire tous mes caractères. C'est le cas*
    - si je déclare char i[4], j'ai une erreur "invalid types 'uint8_t [80] {aka unsigned char [80]}[char [4]]' for array subscript"
    - avec char i[], ca ne fonctionne pas non plus
    - avec char buf pas mieux
    - avec la concaténation de i[0] et i[1] et i[2], rien
    Après 4 heures de recherche, je peux dire que l’émetteur envoie bien const char *msg = "1-2" au récepteur et le récepteur le reçoit intégralement.
    Mais je n'arrive toujours pas à lire dans buf(i) tout le message, soit 1-2
    Vos idées sont les bienvenues :wink:

bonjour,
un peut normal pour le récepteur
if (buf ne correspond qu'un un "caractère" et non la totalité
remplace par ceci
* *if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non         {             Serial.print("RX : ");             for (byte i = 0; i < buflen; i++) // Si il n'est pas corrompu on l'affiche via Serial                 Serial.print(buf[i]);             Serial.println("");         }* *
tu devrais voir les caractères arriver.
as toi de les mettre bout à bout pour faire ta comparaison :wink:

Et pour compléter ce que dit infobarquee, en C, on ne peut pas comparer 2 chaines comme tu l'as fait : if(chaine1 == chaine2)
Il faut utiliser la fonction strncmp

Il y a une autre solution sur arduino, la solution C++ avec la class String