Problème Shield NFC et carte SD

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);
  }

Cela t'arrive souvent de lire un fichier avant de l'ouvrir :

   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();
      }

Si tu indentais ton code correctement tu y verrais certainement un peu plus clair (CTRL-T).

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. :confused:

Je tiens quand même à préciser que je débute en arduino et que beaucoup de notions ne sont pas encore clair pour moi...

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
}
}

Le pseudo code est tellement clair qu'une petite erreur est facile à corriger

  • si code non trouvé :*
    _ afficher "clé valide" -> Cle pas valide/inconnue_
  • autre action*

le copier coller a encore frappé

Ouaaaa je vous suis pas du tout … J’suis vraiment nul à chier en arduino

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-

le copier coller a encore frappé

Yes.
L'avantage du vrai code est que l'on s'en aperçoit vite à l'exécution.

J'ai même ajouté des accolades à mon pseudo-code 8)
Et une indentation claire :sunglasses: :sunglasses: :sunglasses:

Ouaaaa je vous suis pas du tout ... J'suis vraiment nul à chier en arduino

Alors il vaut mieux commencer par la base :

  • un exemple de lecture de fichier de la librairie SD
  • un exemple de lecture de tag de la librairie NFC

Une fois que tu as tout compris, tu verras facilement tes erreurs.

Entre balises code avant de me faire engueuler :

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"

ok , c'est bon j'ai traduis l'algo en code arduino mais il me manque quelque code , que je ne sais pas traduire...
voici mon code traduis :

if (nfc.tagPresent()) {
	NfcTag tag = nfc.read();
	codetrouve = false
	myFile = SD.open("verif.txt", FILE_READ);
	while (myFile.available()) {
		Serial.write(myFile.read());
		comparer les deux variables
		if codes identiques {
				serial.println ("clé valide");
				codetrouve = true
				myFile.close();
			}
		}
	}
	if codetrouve == false {
			serial.println ("clé invalide");
			myFile.close();
		}
}

Beaucoup de points virgules manquent :

codetrouve = false;

Conditions if sans parenthèses :

if (codetrouve == false) {

L'UID du tag se récupère comme ceci :

        const char *uid = tag.getUidString().c_str();

Affiche la variable tag pour savoir ce qu'elle contient et ce qu'il faudra comparer :

        tag.print();