image.pngimage.png

    1. #include <SPI.h>
    2. #include <MFRC522.h>
    3. #define RST_PIN 5 // 配置针脚
    4. #define SS_PIN 4
    5. MFRC522 mfrc522(SS_PIN, RST_PIN); // 创建新的RFID实例
    6. MFRC522::MIFARE_Key key;
    7. void setup() {
    8. Serial.begin(9600); // 设置串口波特率为9600
    9. SPI.begin(); // SPI开始
    10. mfrc522.PCD_Init(); // Init MFRC522 card
    11. Serial.println("test-demo-start");
    12. }
    13. void loop() {
    14. // 寻找新卡
    15. if ( ! mfrc522.PICC_IsNewCardPresent()) {
    16. //Serial.println("没有找到卡");
    17. return;
    18. }
    19. // 选择一张卡
    20. if ( ! mfrc522.PICC_ReadCardSerial()) {
    21. Serial.println("没有卡可选");
    22. return;
    23. }
    24. // 显示卡片的详细信息
    25. Serial.print(F("卡片 UID:"));
    26. dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
    27. Serial.println();
    28. Serial.print(F("卡片类型: "));
    29. MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
    30. Serial.println(mfrc522.PICC_GetTypeName(piccType));
    31. // 检查兼容性
    32. if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI
    33. && piccType != MFRC522::PICC_TYPE_MIFARE_1K
    34. && piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    35. Serial.println(F("仅仅适合Mifare Classic卡的读写"));
    36. return;
    37. }
    38. MFRC522::StatusCode status;
    39. if (status != MFRC522::STATUS_OK) {
    40. Serial.print(F("身份验证失败?或者是卡链接失败"));
    41. Serial.println(mfrc522.GetStatusCodeName(status));
    42. return;
    43. }
    44. //停止 PICC
    45. mfrc522.PICC_HaltA();
    46. //停止加密PCD
    47. mfrc522.PCD_StopCrypto1();
    48. return;
    49. }
    50. /**
    51. 将字节数组转储为串行的十六进制值
    52. */
    53. void dump_byte_array(byte *buffer, byte bufferSize) {
    54. for (byte i = 0; i < bufferSize; i++) {
    55. Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    56. Serial.print(buffer[i], HEX);
    57. }
    58. }