实验材料:Arduino Uno,RFID-RC522,SG90
软件:Mixly 1.1.5
Uno-RC522接线:
10 | SDA |
---|---|
11 | MOSI |
12 | MISO |
13 | SCK |
Uno-SG90接线:
5V | 红色线 |
---|---|
GND | 棕色线 |
7 | 黄色线 |
实验效果图:
实验视频:
mixly 图形化rfid门禁
图形化代码:
C语言代码:
//4字节卡序列号,第5字节为校验字节
unsigned char serNum[5];
//写卡数据
//原扇区A密码,16个扇区,每个扇区密码6Byte
unsigned char sectorKeyA[16][16] = {
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},};
//新扇区A密码,16个扇区,每个扇区密码6Byte
unsigned char sectorNewKeyA[16][16] = {
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},};
#include <SPI.h>
#include <RFID.h>
#include <Servo.h>
RFID rfid(10,5);
unsigned char i,tmp;
unsigned char status;
unsigned char str[MAX_LEN];
unsigned char RC_size;
unsigned char blockAddr; //选择操作的块地址0~63
Servo servo_7;
String RFID_readcardnum(){
rfid.readCardSerial();
String stringserNum = String(rfid.serNum[0], HEX)+String(rfid.serNum[1], HEX)+String(rfid.serNum[2], HEX)+String(rfid.serNum[3], HEX)+String(rfid.serNum[4], HEX);
//选卡,返回卡容量(锁定卡片,防止多次读写)
rfid.selectTag(rfid.serNum);
return stringserNum;
}
void setup(){
Serial.begin(9600);
SPI.begin();
rfid.init();
servo_7.attach(7);
}
void loop(){
if(rfid.isCard()){
Serial.println("");
}
if(rfid.isCard()){
if (RFID_readcardnum() == "208e36aa1") {
servo_7.write(180);
delay(1000);
servo_7.write(0);
delay(10);
}
}
}
Ps:可能会出现无法读取卡号问题,可以断电重连试试或者换一个RC522.