Arduino与RC522读卡测试代码

RC522与Arduino读卡代码

做了Arduino作品集4年多了,让我印象比较深刻的是每当有人用RC522的时候都会遇到同样一个问题,就是为什么我的卡读取不了卡号,我明明是用网上的教程啊?在这里我声明一点,网上的教程不一定是正确的,当然大部分都是有参考意义的。并且还会有一个小问题,就是我读到卡号了,但是就是不会用?兄弟们,不要急,接下来三铭学长为你解答。

1.准备材料

材料名称数量
Arduino UNO 1
RC522模块1
IC卡2
LED(大功率,不接电阻)1

2.接线

RC522与Arduino接线
RC522Adruino
DAD10
SCKD13
MOSID11
MISOD12
GNDGND
RST(不要接9)5V
3.3V

LED与Arduino接线

LED正极(长引脚)D6
LED负极(短引脚)D7

3.示例成功代码

/*TB店铺:DC创客科技*/
/*博主WX:16620156636*/

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9//重置
MFRC522 rfid(SS_PIN, RST_PIN); //实例化类
// 初始化数组用于存储读取到的NUID
byte nuidPICC[4];
void setup() 
{
Serial.begin(9600);
SPI.begin(); // 初始化SPI总线
rfid.PCD_Init(); // 初始化 MFRC522
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
}
void loop() 
{
  Read();

  if(nuidPICC[0]==0x22 &&nuidPICC[1]==0xB9 &&nuidPICC[2]==0x7A &&nuidPICC[3]==0x34 )        
  { 
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);
  }
 else
  {
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);
  }
  }



void printHex(byte *buffer, byte bufferSize) 
{
for (byte i = 0; i < bufferSize; i++)
{
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}

void Read()
{
if ( ! rfid.PICC_IsNewCardPresent())
return;
// 验证NUID是否可读
if ( ! rfid.PICC_ReadCardSerial())
return;
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
// 检查是否MIFARE卡类型
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println("不支持读取此卡类型");
return;
}

// 将NUID保存到nuidPICC数组
for (byte i = 0; i < 4; i++) 
{
nuidPICC[i] = rfid.uid.uidByte[i];
}
Serial.print("UID:");
printHex(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
// 使放置在读卡区的IC卡进入休眠状态,不再重复读卡
//rfid.PICC_HaltA();
// 停止读卡模块编码
//rfid.PCD_StopCrypto1();
}

4.效果

刷正确的卡LED亮,刷其他卡LED 灭。

串口监视器可以读出卡号。

如果有用,请关注或者打赏博主,您的认可是我最大的动力!

<think>好的,用户需要的是ArduinoRFID RC522模块结合实现开门和开灯功能的示例代码。首先,我需要回忆一下RFID RC522模块的基本使用方法。这个模块通常通过SPI接口Arduino连接,需要用到MFRC522库。所以第一步是确保用户安装了这个库。 接下来,硬件连接部分。RC522的引脚需要正确连接到Arduino。通常,SDA接10,SCK接13,MOSI接11,MISO接12,RST接9。电源方面,3.3V和GND也要接好。同时,用户可能还需要连接继电器模块来控制门锁和灯,继电器通常接在数字引脚,比如7和6。 然后是代码结构。首先包含必要的库,比如SPI和MFRC522。定义继电器引脚和已授权的RFID卡UID。在setup函数中初始化串口、SPI、RC522模块和继电器引脚。在loop函数中不断检测是否有卡片接近,如果有就读卡号,然后比对已授权的UID,如果匹配则触发继电器动作,比如开门和开灯,延迟一段时间后关闭。 需要注意的地方是,用户需要替换代码中的授权卡UID为自己的卡片UID,可以通过测试代码先读取卡号。另外,继电器是低电平触发还是高电平触发需要根据具体模块调整,代码中默认设置为低电平触发,可能需要修改。 用户可能的疑问点包括如何获取卡片的UID,这时候需要指导他们运行示例代码读取。另外,继电器的连接是否正确,以及门锁和灯的电源部分如何处理,可能需要提醒用户注意安全,特别是使用外部电源时。 最后,生成相关问题需要考虑用户可能的下一步需求,比如如何添加更多卡片、增加其他验证方式或者记录访问日志。这些问题有助于用户进一步扩展项目。</think>以下是用Arduino结合RFID-RC522模块实现门禁控制的代码示例,包含继电器控制逻辑: ```arduino #include <SPI.h> #include <MFRC522.h> #define RST_PIN 9 // 复位引脚 #define SS_PIN 10 // SDA引脚 #define RELAY_DOOR 7 // 门锁继电器 #define RELAY_LIGHT 6 // 灯光继电器 MFRC522 mfrc522(SS_PIN, RST_PIN); // 创建RFID实例 // 授权卡UID列表(替换为您自己的卡号) byte authorizedUID[][4] = { {0x12, 0x34, 0x56, 0x78}, {0x9A, 0xBC, 0xDE, 0xF0} }; void setup() { Serial.begin(9600); SPI.begin(); mfrc522.PCD_Init(); pinMode(RELAY_DOOR, OUTPUT); pinMode(RELAY_LIGHT, OUTPUT); digitalWrite(RELAY_DOOR, HIGH); // 初始关闭继电器 digitalWrite(RELAY_LIGHT, HIGH); // 使用低电平触发继电器时保持高电平 } void loop() { // 检测新卡 if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) { return; } // 显示卡号 Serial.print("检测到卡号:"); String uid = ""; for (byte i = 0; i < mfrc522.uid.size; i++) { uid += (mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); uid += String(mfrc522.uid.uidByte[i], HEX); } Serial.println(uid); // 验证授权 bool isAuthorized = false; for (int i = 0; i < sizeof(authorizedUID)/sizeof(authorizedUID[0]); i++) { if(memcmp(mfrc522.uid.uidByte, authorizedUID[i], 4) == 0) { isAuthorized = true; break; } } if (isAuthorized) { activateSystem(); } else { Serial.println("未授权卡!"); } mfrc522.PICC_HaltA(); // 停止读卡 } void activateSystem() { Serial.println("授权通过,开启系统"); // 开门并亮灯 digitalWrite(RELAY_DOOR, LOW); digitalWrite(RELAY_LIGHT, LOW); delay(5000); // 保持开启5秒 // 关闭系统 digitalWrite(RELAY_DOOR, HIGH); digitalWrite(RELAY_LIGHT, HIGH); Serial.println("系统关闭"); } ``` 硬件连接说明: 1. RC522模块接线: - SDA -> D10 - SCK -> D13 - MOSI -> D11 - MISO -> D12 - RST -> D9 - 3.3V -> 3.3V - GND -> GND 2. 继电器模块: - IN1 -> D7(门锁控制) - IN2 -> D6(灯光控制) - VCC -> 5V - GND -> GND 使用注意事项: 1. 需要先通过测试代码获取自己的RFID卡UID,替换代码中的`authorizedUID`数组[^1] 2. 继电器模块建议使用带光耦隔离的型号 3. 门锁和灯光设备需通过继电器控制,注意电源隔离 4. 继电器的触发方式(高/低电平)需实际模块匹配
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值