lecture NTAG RC522 sans utilisé IsNewCardPresent()

guyo_21:
Bonjour,

J'ai réalisé un code qui lit des NTAG depuis un RC522/Arduino Uno piloté depuis une application que j'ai faite en C# .net

Mon code:

void Ntag_is_here()

{
 Serial.print(Begin);

if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial())
 {
   Serial.print("NO");
 }
 else
   Serial.print("YES");
 
 Serial.print(End);
}





Mon code fonctionne parfaitement, mais... je suis obligé de relancer mon application C# ET de soit retiré ce NTAG ou soit en remettre un nouveau. Les print begin, end, ne sont biensure là que pour le traitement coté PC...

j'ai tenté d'utilisé un while toujours coté Arduino mais je boucle toujours sur "NO"



void Ntag_is_here()
{
 Serial.print(Begin);

while (mfrc522.PICC_ReadCardSerial())
 {
   Serial.print("YES");
 }
Serial.print("NO");
 
 Serial.print(End);
}






Merci pour votre aide.

Bonjour
je n'ai pas saisi exactement quel est vraiment ton probleme , mais je pense que tu n'a pas inclus qq part dans tes phases de lectures un PICC_HaltA , pour cloturer aprés une lecture reussie

 mfrc522.PICC_HaltA(); // Halt PICC

J'avais eu lors de mes premiers essais un "blocage affichage" lors de la presentation/retrait d'un tag
résolu par cette ligne.

juste pour info , je poste dessous le code que j'avais utilisé

#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>  // Comes with Arduino IDE

#include <LiquidCrystal_I2C.h>

/*-----( Declare Constants )-----*/
//none
/*-----( Declare objects )-----*/
// set the LCD address to 0x20 for a 20 chars 4 line display
// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
#define SS_PIN 10    //Arduino Uno
#define RST_PIN 9
byte tagok = 0;

unsigned long sernum[11] = {0, 679864085, 3478850816, 1159921925, 3278950471, 1364574940, 0, 0, 0, 0, 1149839889}; //poste 0 N° carte lue, poste 1 à 9 pour UID carte a tester, poste 10 carte master

MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522  instance.
MFRC522::MIFARE_Key key;
int led = 8;
void setup() {
  lcd.begin(16, 2);
  pinMode(led, OUTPUT);
  Serial.begin(9600);        // Initialize serial communications with the PC
  SPI.begin();                // Init SPI bus
  mfrc522.PCD_Init();        // Init MFRC522 card
  Serial.println("SERIAL OK ");
  lcd.backlight(); // finish with backlight on

  //-------- Write characters on the display ----------------
  // NOTE: Cursor Position: CHAR, LINE) start at 0
  lcd.clear();
  lcd.home ();
  lcd.setCursor(0, 0); //Start at character 4 on line 0
  lcd.print("LECTEUR MFRC522");
  lcd.setCursor(0, 1); //Start at character 4 on line 0
  lcd.print("TEST ARTOUSTE");
}

void loop() {

  digitalWrite(led, LOW);
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())    return;

  Serial.print("Card UID:");    //Dump UID
  for (byte i = 0; i < 4; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  }

  sernum[0] = *((unsigned long *)mfrc522.uid.uidByte); //recup num serie lu long unsigned
  lcd.clear();
  lcd.setCursor(0, 0); //Start at character 1 on line 0
  lcd.print(sernum[0]);
  Serial.print(" ");
  Serial.print(sernum[0]);
  Serial.print(" ");
  Serial.print(sernum[0], HEX);
  Serial.print(" ");
  tagok = 0;
  for  (byte i = 1; i < 10; i++) {
    if (sernum[0] == sernum[i]) tagok = 1; // carte reconnue dans la liste

  }
  if (sernum[0] == sernum[10]) tagok = 255; // carte master reconnue

  if (tagok == 0) { // faire si carte inconnue
    lcd.setCursor(0, 1);
    lcd.print("TAG INCONNU");
    Serial.print("TAG INCONNU");
  }
  if (tagok > 0) //faire si carte reconnue
  {
    digitalWrite(led, HIGH);
    Serial.print("TAG OK ");
    lcd.setCursor(0, 1);
    lcd.print("TAG OK");
    if (sernum[0] == sernum[1]) Serial.print("Badge STOCK     " );
    if (sernum[0] == sernum[2]) Serial.print("Badge LABO      " );
    if (sernum[0] == sernum[3]) Serial.print("Bramble card " );
    if (sernum[0] == sernum[4]) Serial.print("Badge ANECHO    " );
    if (sernum[0] == sernum[5]) Serial.print("Badge CLOTURE    " );
    if (sernum[0] == sernum[10]) Serial.print("Badge MASTER    " );
    delay(1500);
    digitalWrite(led, LOW);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("   PRESENTEZ");
    lcd.setCursor(0, 1);
    lcd.print("     BADGE");
  }

  if (tagok == 255) //faire si carte master reconnue
  {

    Serial.print("CARTE MASTER RECONNUE");

  }


  Serial.println();

  mfrc522.PICC_HaltA(); // Halt PICC

}