j'ai un probleme dans mon code au niveau de la fonction loop() , je veux compare le code lu par le module RFID et le compare avec le code stoke dans le tableau card[4],pur affiche si c'est une card autorise ou nn , mais ca marche pas la comparaison , ca donne erreur, voila mon coe et merci d'avance :
#include <LiquidCrystal.h>
// initializes the library with the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
boolean end_of_frame = false;
int digit;
int test,i;
int char_received = 0;
byte HEX_number[4], C, val;
byte card[4] = { '8A' , '5C' , '11' , 6b' };
void serial_init()
{ Serial.begin(115200);
Serial.println("RFID");
}
void serial1_init()
{ Serial1.begin(9600);
delay(10);
Serial1.write(0x02);
}
void lcd_init()
{lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print(" ");
}
/*********************************************************************************************************/
void setup()
{
serial_init();
lcd_init();
serial1_init();
}
/**********************************************************************************************************/
void loop()
{ // read numeric DATA coming from the RFID module and send it to the serial monitor
int j=0,i,test=0;
while (Serial1.available())
{
HEX_number[j] = Serial1.read(); //la lecture du code ce fai 2 par 2 ca veux dire
j++; // pour le code suivant : 3A 5B AA 11 la lecteur ce fai : 3A puis 5B puis AA ...
if (HEX_number[j] < 10) // donc je fai la lecture et je stok la code dans un tableau hex_number[4]
Serial.print("0");
end_of_frame = true; // apres avoir lu l ensemble du code et le stok d'un tableau on passe pour le test
}
delay(500);
if (end_of_frame) // si la code cmplet a ete lu
{
Serial.println();
for(i=0;i<4;i++) // j'affiche le code stoke dans le tableau dans le serie monitoring
{ Serial.print(HEX_number[i], HEX); // display in HEX
Serial.print(" ");
}
// alors ici le probleme : je veux mtn compare ce tableau avec un tableau ( declare au dessu )pour voir et affiche si card autorise ou nn
test=0;
for(i=0;i<4;i++)
if(HEX_number[i]!=card[i])
test=1;
if(test==0)
{ lcd.setCursor(0, 1);
lcd.print("Autorise"); }
delay(500);
end_of_frame = false;
}
}
Ton code à un souci d'indentation, quand on le colle dans un IDE capable d'indeter automatiquement (Ctrl+T dans arduino IDE) il dit qu'il y a trop d'accolades fermantes... Du coup petite question : Est-ce que ton code compile chez toi ? si oui as tu copié le même code ici ?
le code ca ce compile bien , mai le probleme c dan la comparaison , normalement je fai passe la card contient meme code donc il doit afiche autorise dans lcd mais ce nes pas le cas : voila encore le code a 100% ce compile dans le logiciel (arduino )
#include <LiquidCrystal.h>
// initializes the library with the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
boolean end_of_frame = false;
int digit;
int test,i;
int char_received = 0;
byte HEX_number[4], C, val;
byte card[4] = { '8A' , '5C' , '11' , '6b' };
void serial_init()
{ Serial.begin(115200);
Serial.println("RFID");
}
void serial1_init()
{ Serial1.begin(9600);
delay(10);
Serial1.write(0x02);
}
void lcd_init()
{lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print(" ");
}
/*********************************************************************************************************/
void setup()
{
serial_init();
lcd_init();
serial1_init();
}
/**********************************************************************************************************/
void loop()
{ // read numeric DATA coming from the RFID module and send it to the serial monitor
int j=0,i,test=0;
while (Serial1.available())
{
HEX_number[j] = Serial1.read(); //la lecture du code ce fai 2 par 2 ca veux dire
j++; // pour le code suivant : 3A 5B AA 11 la lecteur ce fai : 3A puis 5B puis AA ...
if (HEX_number[j] < 10) // donc je fai la lecture et je stok la code dans un tableau hex_number[4]
Serial.print("0");
end_of_frame = true; // apres avoir lu l ensemble du code et le stok d'un tableau on passe pour le test
}
delay(500);
if (end_of_frame) // si la code cmplet a ete lu
{
Serial.println();
for(i=0;i<4;i++) // j'affiche le code stoke dans le tableau dans le serie monitoring
{ Serial.print(HEX_number[i], HEX); // display in HEX
Serial.print(" ");
}
// alors ici le probleme : je veux mtn compare ce tableau avec un tableau ( declare au dessu )pour voir et affiche si card autorise ou nn
test=0;
for(i=0;i<4;i++)
if(HEX_number[i]!=card[i])
test=1;
if(test==0)
{ lcd.setCursor(0, 1);
lcd.print("Autorise"); }
delay(500);
end_of_frame = false;
}
}
le probleme c au niveau de la comparaison ( ligne 72 ) comparaison entre le code lu d'apres le RFID et le code stoke dans le tableau hex_number, erreur de type ou genre comme ca
alors j explique : j utilise un arduino mega 2560 avec un RFID 13 hz , branche en serie . donc le elcteur rfid fai la lecture des code de cet taille : 8A3C112B par exemple .
alors : ici je fai la lecture du code et je stoke dans un tableau de 4 case : hex_number[4], pk 4 ? car la lecture du code ce fai 2 par 2 : 8A puis apres reboucle 3C puis 11 puis 28 , donc je fais la lecture et je stok dans le tableau.
while (Serial1.available())
{
HEX_number[j] = Serial1.read(); //la lecture du code ce fai 2 par 2 ca veux dire
j++; // pour le code suivant : 3A 5B AA 11 la lecteur ce fai : 3A puis 5B puis AA ...
if (HEX_number[j] < 10) // donc je fai la lecture et je stok la code dans un tableau hex_number[4]
Serial.print("0");
end_of_frame = true; // apres avoir lu l ensemble du code et le stok d'un tableau on passe pour le test
}
maintenant j ai fai la lecture du code complet , je sorte de la boucle : et je fai l'affichage du code dans le serie monitoring : et bien sur ca marche bien il m'affiche
8A 3C 11 2B , c bien jusqu'a mtn.
for(i=0;i<4;i++) // j'affiche le code stoke dans le tableau dans le serie monitoring
{ Serial.print(HEX_number[i], HEX); // display in HEX
Serial.print(" ");
}
alors maintenant je veux faire le test entre ce code lu , avec un code stoke dans un tableau que j ai déjà créer et déjà initialise ( card[] ). si il sont egaux ca veux dire les 2 tableau sont égaux j affiche " autorise dans LCD. et c est la ou il y a le problème , il n’affiche pas cet autorise
Oh ca marche parfaitement hh lol , vous êtes un génie lol , merci bcp pour votre aide , et en fait tu peu m'explique pk cette methode ca marche et l autre non ?
En fait tu cherches à comparer des nombres codés en hexadécimal. Pour les écrires on utilise donc ce format avec 0x..
En faisant comme tu faisais avant, tu enregistrais des caractères et d'ailleurs au passage, on aurait du le voir avant mais l'écriture était fausse. En effet, un caractère s'écrit entouré de guillemets simple comme 'A' par exemple. C'est complètement différent d'un numéro hexadécimal. Pour les lires il faut utiliser une table ASCII.
Par exemple, les trois écritures suivantes sont exactement egales :
byte A = 'A';
//est pareil que
byte A = 65; //en décimal
//ou encore
byte A = Ox41; //en hexadécimal
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
The wings of Technology
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !
The wings of Technology
Retrouvez moi sur mon blog et ma chaine Youtube !
The wings of Technology
Retrouvez moi sur mon blog et ma chaine Youtube !
The wings of Technology
The wings of Technology
Retrouvez moi sur mon blog et ma chaine Youtube !
The wings of Technology
Retrouvez moi sur mon blog et ma chaine Youtube !
The wings of Technology
Retrouvez moi sur mon blog et ma chaine Youtube !