// 导入必要的库 #include // I2C 通信库 #include // I2C LCD 显示库 #include // SPI 通信库 #include // MFRC522 RFID 读卡器库 // 定义 RFID 连接的引脚 #define SS_PIN 10 // SDA/SS 片选引脚 #define RST_PIN 2 // RST 复位引脚 // 定义 继电器连接的引脚 #define RELAY_PIN 8 // 创建 RFID 实例 MFRC522 rfid(SS_PIN, RST_PIN); // 初始化 I2C LCD1602 (地址0x27, 16列2行) LiquidCrystal_I2C lcd(0x27, 16, 2); // 预设的 RFID 卡片 ID(已更新为 73 B2 63 D) byte allowedUID[4] = {0x73, 0xB2, 0x63, 0xD}; void setup() { Serial.begin(9600); // 设置串口波特率 SPI.begin(); // 启动 SPI 通信 rfid.PCD_Init(); // 初始化 RFID 读卡器 lcd.init(); // 初始化 LCD lcd.backlight(); // 打开 LCD 背光 pinMode(RELAY_PIN, OUTPUT); // 设置继电器为输出模式 digitalWrite(RELAY_PIN, LOW); // 默认关闭继电器 // LCD 显示初始信息 lcd.setCursor(0, 0); lcd.print("Welcome !"); Serial.println("系统已启动,请刷卡..."); } void loop() { // 检查是否有新卡片 if (!rfid.PICC_IsNewCardPresent()) { return; } // 读取卡片序列号 if (!rfid.PICC_ReadCardSerial()) { return; } Serial.print("卡片 ID: "); lcd.clear(); lcd.setCursor(0, 0); lcd.print("ID: "); bool isAuthorized = true; // 记录是否匹配 for (byte i = 0; i < rfid.uid.size; i++) { Serial.print(rfid.uid.uidByte[i], HEX); // 以十六进制格式打印卡号 Serial.print(" "); lcd.print(rfid.uid.uidByte[i], HEX); lcd.print(" "); // 比对是否匹配预设 ID if (rfid.uid.uidByte[i] != allowedUID[i]) { isAuthorized = false; } } Serial.println(); // 换行 if (isAuthorized) { // ID 匹配,打开继电器 Serial.println("Authorization successful, door opened!"); lcd.setCursor(0, 1); lcd.print("Welcome home !"); digitalWrite(RELAY_PIN, HIGH); // 继电器吸合(打开门) delay(2000); // 保持2秒 digitalWrite(RELAY_PIN, LOW); // 关闭继电器 } else { // ID 不匹配,显示未知用户 Serial.println("Unauthorized user!"); lcd.setCursor(0, 1); lcd.print("Unknown Guy !"); delay(2000); } // 恢复初始状态 lcd.clear(); lcd.setCursor(0, 0); lcd.print("Welcome !"); rfid.PICC_HaltA(); // 让 RFID 模块进入低功耗模式,等待下次读取 }