voie série et comparaison de chaines de caractères

Le problème exposé dans ce sujet a été résolu.

Bonsoir, Je suis nouvelle en Arduino et pour m’entraîner avant de refaire le tp "Baignade" (car j’avais quand même du mal à le faire j’ai un peu tricher :( ) j’ai écrit le programme suivant:

char mot[20];

void setup() {
Serial.begin(9600);
}

void loop() {
 while(Serial.available()>0)
{ 
  affichage(); 
}
}

void affichage(void){
 int i = 0;

 while(Serial.available()>0 && i<19)
  {
    mot[i] = Serial.read();
    delay(10);
    i++;
    }
    
if(strcmp(mot, "requin") == 0)
{
  Serial.println(mot);
  Serial.println("les mots sont identiques");
 
}

else 
{
  Serial.println(mot);
  Serial.println("les mots sont différents");
}
 
} 

Le problème c’est qu’à chaque fois que je tape le mot requin le message "les mots sont différents" s’affiche.

Quel est le problème avec mon code svp?

Merci!

+0 -0

Salut et bienvenue sur Zeste de Savoir ! :)

Tu as oublié une petite chose à faire avant de comparer les chaînes de caractères. La réponse est dans cette partie et concerne le caractère \0. ;)

Bonne chance !

+1 -0

@Fvb02 Conseil: indente ton code avec le même nombre d’espaces (2 à 4 en général) pour faciliter ta relecture et celle par les autres (bien que là ton code ne soit pas conséquent en taille) comme ci-dessous par exemple:

//Avec indentation
void affichage(void)
{
    int i = 0;

    while(Serial.available()>0 && i<19)
    {
      mot[i] = Serial.read();
      delay(10);
      i++;
    }
    
    if(strcmp(mot, "requin") == 0)
    {
      Serial.println(mot);
      Serial.println("les mots sont identiques");
    }
    else 
    {
      Serial.println(mot);
      Serial.println("les mots sont différents");
    }
} 

Remarque: Dans la plupart des éditeurs de textes (et aussi dans l’IDE Arduino), la touche Tab (tabulation) insert des espaces tout seul pour éviter de devoir s’acharner sur ta barre d’espace :D

Même avec "pas de fin de ligne" ça ne fonctionne pas ?

Le \0 est un caractère qui indique la fin d’une chaîne de caractère. Quand tu affiches la chaîne on ne le voit pas mais il est bien là. Donc dans ton code, à la ligne 24, le mot "requin" qui sert de comparaison est en fait composé des caractères r, e, q, u, i, n, \0. Quand tu récupère la chaîne mot depuis la liaison série, tu n’as pas le \0 à la fin donc forcément la comparaison échoue. C’est pour ça qu’il faut ajouter "à la main" le \0 après les autres caractères.

Concernant la fin de ligne, j’ai proposé de l’enlever car sinon il est possible que l’appui sur la touche Entrée dans le moniteur série pour valider le mot rajoute un (ou deux) caractère de fin de ligne. Donc dans ce cas mot contiendrait r, e, q, u, i, n, fin de ligne et ça échouerait aussi.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte