RFID Probleme de comparaison

bonsoir
Voila j'ai reçu le lecteur RFID
apres un rapide test , je vois bien les codes RFID ,mais je n'arrive pas a faire une comparaison pour autoriser tels ou tels badge :frowning:

char code[10]; 

char tag1[10] = {'2','8','0','0','1','D','5','3','5','7'}; //define tag 1

et je tente la comparaison comme cela

if(strcmp(code, tag1) == 1) //compare tag1 to the tag read
         {
           digitalWrite(ledPin, HIGH);
           Serial.print("bingo trouvé ");
         }

mais cela ne marche pas

strcmp(code, tag1)

As-tu fait afficher le contenu de la variable code pour essayer de comprendre pourquoi le programme ne fonctionne pas?

oui c'est bien ce qui m'etonne
en faite j'ai trouvé une solution mais j'ai 2 badges qui sont valides alors qu'ils ont bien un numero différent

 if(strcmp(code, "28001D5357") != 1) // comparaison du code RFID
       {
           digitalWrite(ledPin, HIGH);
           Serial.print("badge trouvé : ");
           delay(2000);
           digitalWrite(ledPin, LOW);          // Turn off debug LED
           
           
         }
         else
         {
           Serial.print("Refusé ");
         }

si je passe le badge 24008E5FE7 ca me dit aussi que c'est le bon badge
alors que les autres que j'ai ca me dis refusé
La c'est le grand mistére >:(

Oups j'avais pas fait attention à la première lecture, tes tableaux ne sont pas bien définis.
strcmp travaille avec des chaines. Les chaines doivent se terminer par un \0.
Donc:

  1. il faut 1 élément de plus à tes tableaux
  2. il faut penser à ajouter le terminateur
char code[11];

char tag1[11] = {'2','8','0','0','1','D','5','3','5','7','\0'}; //define tag 1

A mon avis si ton programme te répond OK sur un badge c'est un coup de bol ou un bug.

Librairie Pstring sinon:

http://arduiniana.org/libraries/pstring/

Librairie Pstring sinon:

Cette librairie n'est utilisable que pour faire des impressions. Là le problème c'est du traitement sur les chaines.

Maintenant, si lastiko rencontre des problèmes d'occupation mémoire (la librairie String est assez volumineuse) et qu'il n'utilise que strcmp la fonction peut être réécrite.

Cette librairie n'est utilisable que pour faire des impressions.

Tu peux faire de la comparaison de chaines :

Operators
PString provides three operators for assignment, concatenation, and equivalency test:

char buffer[20];
PString str(buffer, sizeof(buffer));
str = "Yin"; // assignment
str += " Yang"; // concatenation
if (str == "Yin Yang") // comparison
{
Serial.println("They are equal!");
}

Merci B@tto, je m'étais arrêté au titre et aux premières lignes de description de la librairie et je n'avais pas vu les opérateurs.
Cette librairie est intéressante, je crois bien que je vais la récupérer.

merci pour vos aides

char tag1[11] = {'2','8','0','0','1','D','5','3','5','7','\0'}; //define tag 1

Les chaines doivent se terminer par un \0.

ca correspond a quoi ?

char tag1[11] = {‘2’,‘8’,‘0’,‘0’,‘1’,‘D’,‘5’,‘3’,‘5’,‘7’,’\0’}; //define tag 1
Les chaines doivent se terminer par un \0.
ca correspond a quoi ?

Ça correspond à la définition d’une chaine en C.
En C une chaine de caractères doit se terminer par un null.
Le null peut s’écrire de différentes façon.
caractère ‘\0’
byte 0

Donc on peut écrire:

char tag1[11] = {‘2’,‘8’,‘0’,‘0’,‘1’,‘D’,‘5’,‘3’,‘5’,‘7’,’\0’};
ou
char tag1[11] = {‘2’,‘8’,‘0’,‘0’,‘1’,‘D’,‘5’,‘3’,‘5’,‘7’,0};

Une chaine vide c’est:

char tag1[11] = {’\0’};

Quand on définit une chaine avec des guillemets, le \0 est implicitement ajouté par le compilateur.

merci pour cette info bien utile, je comprends mieux maintenant pourquoi la comparaison ne fonctionné pas super bien

un grand merci a B@tto , ca marche nikel avec Pstring

Par contre je n'ai pas réussi avec le code précédent et l'histoire de 0 a la fin

si quelqu'un a le courage de me montrer un code qui compare avec cette methode je suis preneur , histoire de comprendre et de ne plus poser cette question a l'avenir