/*
 * Premier badge — Kaihatsu Lab
 * Lecteur RC522 (SPI) sur ESP32 : affiche l'UID et le type de chaque carte présentée.
 * Bibliothèque : MFRC522 (gestionnaire de bibliothèques de l'IDE Arduino).
 */
#include <SPI.h>
#include <MFRC522.h>

// Broches ESP32 (VSPI). Adaptez-les à votre câblage.
const uint8_t PIN_SCK  = 18;
const uint8_t PIN_MISO = 19;
const uint8_t PIN_MOSI = 23;
const uint8_t PIN_SS   = 5;
const uint8_t PIN_RST  = 22;

MFRC522 rfid(PIN_SS, PIN_RST);

void setup() {
  Serial.begin(115200);
  SPI.begin(PIN_SCK, PIN_MISO, PIN_MOSI, PIN_SS);
  rfid.PCD_Init();
  delay(50);
  rfid.PCD_DumpVersionToSerial();       // 0x91 ou 0x92 : puce reconnue. 0x00 ou 0xFF : problème de câblage.
  Serial.println(F("Approche une carte du lecteur..."));
}

void loop() {
  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;

  Serial.print(F("UID :"));
  for (byte i = 0; i < rfid.uid.size; i++) {
    Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(rfid.uid.uidByte[i], HEX);
  }
  Serial.println();

  MFRC522::PICC_Type type = rfid.PICC_GetType(rfid.uid.sak);
  Serial.print(F("Type : "));
  Serial.println(rfid.PICC_GetTypeName(type));

  rfid.PICC_HaltA();                    // carte en veille : elle ne sera relue qu'après avoir été retirée puis représentée
  rfid.PCD_StopCrypto1();
}
