Bonjour à tous je suis en Terminale Sti2d et j'ai pour projet d'automatiser un portail.
Ma partie étant l'ouverture de proximité j'ai choisi comme solution de faire une ouverture par Lecteur/Tag RFID.
Après avoir fais un code et un montage qui fonctionne en réel, je dois faire une simulation (oui je sais je m'en suis rendu compte un peu tard ^_^) sur Proteus 7 . N'ayant pas d'interface réelle pour simuler un Lecteur/Tag RFID j'ai choisi d'utiliser le Virtual Terminal de Proteus.
Le fonctionnement consiste à entrer une suite de nombres ,correspondant au code du Tag RFID,(variable compare) dans le Terminal et que le M-C le compare à une suite de nombres déja enregistré dans le M-C.
J'ai deja écrit un code dérivé du code qui fonctionne avec mon prototype réel, mais j'ai un souci avec la lecture du Tag entré dans le Terminal et avec la comparaison entre les deux Tags.
Voici ce que j'ai fait pour le moment.
int compare = 0; //variable du tag
int ok = -1;// cette variable aide a la création de décision,
//Si 1 il y a correspondance, si 0 il y a lecture mais pas correspondance.
// -1 aucune tentative de lecture n'a été faite (neutre)
int comparant1[14] = {2,48,50,48,48,53,57,56,69,57,49,52,52,3 }; //tags enregistrés
int comparant2[14] = {2,56,53,48,48,65,70,49,68,55,51,52,52,3};
int newtag[14] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // //tag utilisé pour comparaisons
void setup()
{
Serial.begin(9600); // Debut du serial pour le lecteur Serial
Serial.begin(9600); // Debut du serial pour le pc
Serial.println("Detecteur Serial v2");
Serial.println("Veuillez presenter un tag");
}
boolean comparetag(int aa[14], int bb[14]) //boucle de comparaison
{
boolean ff = false;
int fg = 0;
for (int cc = 0 ; cc < 14 ; cc++)
{
if (aa[cc] == bb[cc])
{
fg++;
}
}
if (fg == 14)
{
ff = true;
}
return ff;
}
void checkmytags() // compare chaque tags au tag qui vien d'etre présenté.
{
ok = 0; // cette variable aide a la création de décision,
//Si 1 il y a correspondance, si 0 il y a lecture mais pas correspondance.
// -1 aucune tentative de lecture n'a été faite
if (comparetag(newtag, comparant1) == true)
{
ok++;
}
if (comparetag(newtag, comparant2) == true)
{
ok++;
}
}
void readTags()
{
ok = -1;
if (Serial.available() > 0)
{
// lire les nombres du tag
delay(100);
for (int z = 0 ; z < 14 ; z++) //Lire chaques caractere de la chaine pour les comparer
{
compare = Serial.read();
newtag[z] = compare;
}
Serial.flush(); // arreter les lectures multiples
// est-ce que les tags correspondent
checkmytags();
}
// Action aprés la comparaison
if (ok > 0) // Si on a eu une correspondance
{
Serial.println("Tag accepted");
delay(1000);
ok = -1;
}
else if (ok == 0) // Si on a pas eu de correspondance
{
Serial.println("Tag refused");
delay(1000);
ok = -1;
}
}
void loop()
{
readTags();
}
Voila! Ci quelqu'un passe par là j'apprécierai un peu d'aide (c'est pour ça que je suis venu :D...).
Ps: Si quelqu'un s'y connais en proteus je risque surement de demander quelques conseils pour la suite, bien que j'ai deja quelques idées sur la façon de procéder.
Bonne journée/Soirée à tous!
EDIT: J'ai reussi! voici le code modifié:
/*NE PAS SUPPRIMER Ce code permet de tester un tag RFID entré sur le Serial */
int tag = 0; //variable du tag
int ok = -1;// cette variable aide a la création de décision,
//Si 1 il y a correspondance, si 0 il y a lecture mais pas correspondance.
// -1 aucune tentative de lecture n'a été faite (neutre)
int comparant1[14] = {58,48,50,48,48,53,57,56,69,57,49,52,52,58}; //:0200598E9144:tags enregistrés
int comparant2[3] = {2,56,53};
int newtag[14] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // //tag utilisé pour comparaisons
void setup()
{
Serial.begin(9600); // Debut du serial pour le pc
Serial.println("Detecteur Serial v2");
Serial.println("Veuillez presenter un tag");
}
boolean comparetag(int aa[14], int bb[14]) //boucle de comparaison
{
boolean ff = false;
int fg = 0;
for (int cc = 0 ; cc < 14 ; cc++)
{
if (aa[cc] == bb[cc])
{
fg++;
}
}
if (fg == 14)
{
ff = true;
}
return ff;
}
void checkmytags() // compare chaque tags au tag qui vien d'etre présenté.
{
ok = 0; // cette variable aide a la création de décision,
//Si 1 il y a correspondance, si 0 il y a lecture mais pas correspondance.
// -1 aucune tentative de lecture n'a été faite
if (comparetag(newtag, comparant1) == true)
{
ok++;
}
/* if (comparetag(newtag, comparant2) == true)
{
ok++;
}*/
}
void readTags()
{
ok = -1;
if (Serial.available() == 14)
{
// lire les nombres du tag
delay(100);
for (int z = 0 ; z < 14 ; z++) //Lire chaques caractere de la chaine pour les comparer
{
tag = Serial.read();
newtag[z] = tag;
Serial.println (newtag[z] );
}
Serial.flush(); // arreter les lectures multiples
// est-ce que les tags correspondent
checkmytags();
}
// Action aprés la comparaison
if (ok > 0) // Si on a eu une correspondance
{
Serial.println("Tag accepted");
delay(1000);
ok = -1;
}
else if (ok == 0) // Si on a pas eu de correspondance
{
Serial.println("Tag refused");
delay(1000);
//Serial.println (ok);
ok = -1;
}
}
void loop()
{
readTags();
}