Voie Série Et Comparaison De Chaines De Caractères - Zeste De Savoir

  • Aller au menu
  • Aller au contenu
  • Aller à la recherche
  1. Accueil
  2. Forums
  3. Savoirs
  4. Systèmes et Matériels
  5. voie série et comparaison de chaines de caractères
OK voie série et comparaison de chaines de caractères Le problème exposé dans ce sujet a été résolu.

Cette réponse a été utile

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!

  • 10/03/19 à 20h18
  • Modifié
+0 -0

Cette réponse a été utile

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 !

  • 10/03/19 à 20h38

“I don’t love studying. I hate studying. I like learning. Learning is beautiful.” – Natalie Portman

+1 -0

Cette réponse a été utile

@PG06 merci:) D’accord j’ai alors ajouté la ligne suivante après la 22 e ligne:

mot[i] = '\0'; delay(10);

Mais ca ne fonctionne toujours pas…

  • 10/03/19 à 20h59
  • Modifié
+0 -0

Cette réponse a été utile

Quel est le réglage de fin de ligne que tu as dans ton moniteur série (en bas à côté de 9600 baud) ?

  • 10/03/19 à 22h11

“I don’t love studying. I hate studying. I like learning. Learning is beautiful.” – Natalie Portman

+0 -0

Cette réponse a été utile

J’ai le réglage "nouvelle ligne".

  • 10/03/19 à 23h09
+0 -0

Cette réponse a été utile

Essaye avec "pas de fin de ligne".

  • 11/03/19 à 07h41

“I don’t love studying. I hate studying. I like learning. Learning is beautiful.” – Natalie Portman

+0 -0

Cette réponse a été utile

@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

  • 11/03/19 à 17h38
+0 -0

Cette réponse a été utile

@Vanadiae d’accord merci du conseil :)

  • 11/03/19 à 23h51
+0 -0

Cette réponse a été utile

Pense à mettre ton sujet en "Résolu" si ton problème est résolu ou sinon fait signe ;)

  • 12/03/19 à 21h00
+1 -0

Cette réponse a été utile

@vanadiae je n’arrive toujours pas à régler le problème:( Mais pourriez vous svp m’expliquer cette ligne afin que je puisse faire les changements nécessaires svp merci!

mot[i] = '\0';
  • 12/03/19 à 22h40
+0 -0

Cette réponse a été utile

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.

  • 13/03/19 à 08h10

“I don’t love studying. I hate studying. I like learning. Learning is beautiful.” – Natalie Portman

+1 -0

Cette réponse a été utile

Salut :)

Normalement si tu veux lire un mot qui est entré,

On utilise Serial.readString() ou Serial.readStringUntil(caractère de fin de lecture).

Pour représenter un saut de ligne, il faut utiliser \n comme tu utiliserais e ou \0

Remarque:

while(Serial.available()>0 && i<19)

Tu peux simplement remplacer Serial.available() > 0 par Serial.available() tout simplement ;)

  • 13/03/19 à 14h55
+0 -0

Cette réponse a été utile

@PG06 Effectivement je vois, oui finalement c’était ca le problème. J’ai choisi l’option pas de fin de ligne et ça a marché merci beaucoup!!! :D

@Vanadiae Merci beaucoup pour les explications et les astuces! Je tâcherai de bien en faire usage! :D

  • 13/03/19 à 17h24
  • Modifié
+0 -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

Retour à la liste des sujets

Tag » Arduino If Caractères