Bonjour, je suis actuellement entrain de faire un projet qui consiste, à quand je passe une carte NFC sur mon shield, il repère l'uid de la carte et la compare à uid enregistrer sur la carte sd en fichier text.
Une fois ceci fais, un message indique que la clé est valide et une led s'allume.
Dans le cas contraire, si l'uid n'est pas répertorié, une autre led s'allume.
Mon problème est que je n'arrive pas à faire tourner ma boucle ou même trouver la constante if pour comparer l'uid de la carte et celui du fichier text de la carte sd.
Si quelqu'un a du temps, ou sais comment y parvenir je ne dis pas non.
Merci d'avance !
Ps: voici mon programme pour que vous voyez les erreurs, et oui désolé pour mes fautes d'orthographes.
#include <SPI.h>
#include "PN532_SPI.h"
#include "PN532.h"
#include "NfcAdapter.h"
#include "SD.h"
#define BrSD 2
File myFile;
String const myUID = "AC D1 6D 05";
int const led = 2; // clé valide
int const leds = 3; // clé incorect
PN532_SPI interface(SPI, 10);
NfcAdapter nfc = NfcAdapter(interface);
void setup(void) {
Serial.begin(115200);
Serial.println("Lecteur NFC");
pinMode(BrSD,OUTPUT);
digitalWrite(BrSD,HIGH);
pinMode(led,OUTPUT);
pinMode(leds,OUTPUT);
digitalWrite(led,LOW);
digitalWrite(leds,LOW);
}
void loop(void) {
nfc.begin();
Serial.println("Scanne...");
if (nfc.tagPresent()) // vérifié si il y a bien un tag
{
NfcTag tag = nfc.read(); // lire le tag nfc
String scannedUID = tag.getUidString(); // avoir le tag nfc inclut dans la carte
if(String scannedUID = myFile.read()){
Serial.print("Initialisation de la carte sd...");
digitalWrite(BrSD,HIGH);
SD.begin(4);
Serial.println("initialization terminer.");
delay(100);
myFile = SD.open("verif.txt", FILE_READ);
if (myFile) {
Serial.println("verif.txt:");
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
digitalWrite(BrSD,HIGH);
// comparer le tag de la carte , au tag inclut dans le programme
// Le bon tag a été lu
Serial.println("Clé valide ");
digitalWrite(led,HIGH);
digitalWrite(leds,LOW);
delay(500);
digitalWrite(led,LOW);
delay(500);
digitalWrite(led,HIGH);
delay(500);
digitalWrite(led,LOW);
}
else{
// un tag incorrect a été lu
Serial.println("CLé invalide");
digitalWrite(led,LOW);
digitalWrite(leds,HIGH);
delay(500);
digitalWrite(leds,LOW);
delay(500);
digitalWrite(leds,HIGH);
delay(500);
digitalWrite(leds,LOW);
}
}
delay(2000);
}
Oui, tu as totalement raison , mais cela ne répond pas à ma question...
En effet, j'y vois un peu plus clair, mais je n'arrive pas pour autant , a voir mes erreurs et , régler mon problème.
Si le tag est présent {
le lire dans la variable scannedUID (c'est fait)
code_trouvé = false (une variable à mettre à 1 si code trouvé)
ouvrir le fichier
tant que ce n'est pas la fin de fichier {
lire une ligne (mais pas dans la même variable comme tu le fais évidemment)
comparer les deux variables
si codes identiques {
afficher "clé valide"
code_trouvé = true
action
}
}
si code_trouvé == false {
afficher "clé invalide"
autre action
}
}
Et si vous commentiez votre programme avant de coder/copier coller des bouts -qui eux aussi, gagneraient à être commentés, passant du statut d'épaves du nain ternet à celui de bouts de code réutilisables-
Si le tag est présent {
le lire dans la variable scannedUID (c'est fait)
code_trouvé = false (une variable à mettre à 1 si code trouvé)
ouvrir le fichier
tant que ce n'est pas la fin de fichier {
lire une ligne (mais pas dans la même variable comme tu le fais évidemment)
comparer les deux variables
si codes identiques {
afficher "clé valide"
code_trouvé = true
action
}
}
si code_trouvé == false {
afficher "clé invalide"
autre action
}
}
Il n'y a plus qu'à remplacer les "si" par des "if" et les "tant que" par des "while"