本文主要是介绍Arduino与RC522读卡测试代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
RC522与Arduino读卡代码
做了Arduino作品集4年多了,让我印象比较深刻的是每当有人用RC522的时候都会遇到同样一个问题,就是为什么我的卡读取不了卡号,我明明是用网上的教程啊?在这里我声明一点,网上的教程不一定是正确的,当然大部分都是有参考意义的。并且还会有一个小问题,就是我读到卡号了,但是就是不会用?兄弟们,不要急,接下来三铭学长为你解答。
1.准备材料
材料名称 | 数量 |
Arduino UNO | 1 |
RC522模块 | 1 |
IC卡 | 2 |
LED(大功率,不接电阻) | 1 |
2.接线
RC522与Arduino接线 | |
RC522 | Adruino |
DA | D10 |
SCK | D13 |
MOSI | D11 |
MISO | D12 |
GND | GND |
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 灭。
串口监视器可以读出卡号。
如果有用,请关注或者打赏博主,您的认可是我最大的动力!
这篇关于Arduino与RC522读卡测试代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!