1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| #include <SPI.h> #include <MFRC522.h> #include <SoftwareSerial.h> #include <DFRobotDFPlayerMini.h>
#define RST_PIN 9 #define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN); SoftwareSerial mySoftwareSerial(2, 3); DFRobotDFPlayerMini myDFPlayer;
String lastCardUID = ""; bool dfPlayerInitialized = false;
void setup() { Serial.begin(9600); while (!Serial);
SPI.begin(); mfrc522.PCD_Init(); byte version = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); if (version == 0x00 || version == 0xFF) { Serial.println(F("错误: MFRC522 通信失败! 请检查接线。程序已停止。")); while (1); } Serial.println(F("MFRC522 模块通信正常!"));
mySoftwareSerial.begin(9600); Serial.println(F("正在初始化 DFPlayer Mini 模块...")); if (myDFPlayer.begin(mySoftwareSerial)) { dfPlayerInitialized = true; Serial.println(F("DFPlayer 初始化成功!")); myDFPlayer.volume(20); myDFPlayer.EQ(DFPLAYER_EQ_NORMAL); } else { dfPlayerInitialized = false; Serial.println(F("DFPlayer 初始化失败! 请检查接线和SD卡。")); } Serial.println(F("\n系统准备就绪,请刷卡...")); }
void loop() { if (!mfrc522.PICC_IsNewCardPresent()) { lastCardUID = ""; return; }
if (!mfrc522.PICC_ReadCardSerial()) { return; }
String currentCardUID = ""; for (byte i = 0; i < mfrc522.uid.size; i++) { if (mfrc522.uid.uidByte[i] < 0x10) { currentCardUID += "0"; } currentCardUID += String(mfrc522.uid.uidByte[i], HEX); if (i < mfrc522.uid.size - 1) { currentCardUID += " "; } } currentCardUID.toUpperCase(); if (currentCardUID != lastCardUID) { Serial.print("检测到新标签 UID: "); Serial.println(currentCardUID);
lastCardUID = currentCardUID; if (dfPlayerInitialized) { playAudioForCard(currentCardUID); } else { Serial.println("检测到标签,但 DFPlayer 尚未就绪,无法播放。"); } } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); }
void playAudioForCard(String uid) { if (uid == "1D 93 C7 0D 0D 10 80") { myDFPlayer.playMp3Folder(1); Serial.println("正在播放: 音频1"); } else if (uid == "1D 92 C7 0D 0D 10 80") { myDFPlayer.playMp3Folder(2); Serial.println("正在播放: 音频2"); } else if (uid == "1D 91 C7 0D 0D 10 80") { myDFPlayer.playMp3Folder(3); Serial.println("正在播放: 音频3"); } else { Serial.println("未识别的标签"); } }
|