赞
踩
做了Arduino作品集4年多了,让我印象比较深刻的是每当有人用RC522的时候都会遇到同样一个问题,就是为什么我的卡读取不了卡号,我明明是用网上的教程啊?在这里我声明一点,网上的教程不一定是正确的,当然大部分都是有参考意义的。并且还会有一个小问题,就是我读到卡号了,但是就是不会用?兄弟们,不要急,接下来三铭学长为你解答。
材料名称 | 数量 |
Arduino UNO | 1 |
RC522模块 | 1 |
IC卡 | 2 |
LED(大功率,不接电阻) | 1 |
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 |
- /*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();
- }
-
刷正确的卡LED亮,刷其他卡LED 灭。
串口监视器可以读出卡号。
如果有用,请关注或者打赏博主,您的认可是我最大的动力!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。