基于arduino UNO R3 的 MF RC522射频卡控制继电器的实验
[复制链接]
硬件支持:1.一块arduino Uno R3
2.一个MF RC522非接触式射频接收模块+射频卡
3.一个5v电子继电器
软件工具: IDE(arduino-1.0.5-r2 )
硬件连接: RC522工作电压3.3v
Arduino RC522
D5————————RST
D10————————SDA(CS)
D11————————MOST
D12————————MISO
D13————————SCK
GND————————GND
VCC(3.3V)————————VCC(3.3V)
Arduino 继电器
D7————————IN
GND————————CND
VCC(5V)————————VCC(5V)
MF RC522射频模块的库文件加到 IDE(arduino-1.0.5-r2 )库中。
在 IDE(arduino-1.0.5-r2 )文件夹中找到libraries文件夹将MF RC522库文件复制到当前
代码:
#include <SPI.h>
#include <RFID.h>
RFID rfid(10,5); //D10--读卡器MOSI引脚、D5--读卡器RST引脚
int led = 9;
int relay=7;
bool state=true;
void setup()
{
Serial.begin(9600);
SPI.begin();
rfid.init();
pinMode(led, OUTPUT); //设置引脚的模式:输出模式还是输入模式,括号里逗号之前是对应设置的是引脚,逗号后面是设置输出还是输入,输入模式INPUT,引脚输出OUTPUT。
pinMode(relay,OUTPUT);
digitalWrite(relay,HIGH);//做输出端口,则写:digitalWrite(,);做输入端口,则读 digitalRead(,);digitalWrite(theRedLed,HIGH)引脚输出高电平,digitalWrite(theRedLed,LOW)引脚输出低电平。
}
void loop()
{
unsigned char type[MAX_LEN];
//找卡
if(rfid.isCard()) {
Serial.println("Find the card!");
;
//Show card type
ShowCardType(type);
//读取卡序列号
if(rfid.readCardSerial()) {
Serial.print("The card's number is : ");
Serial.print(rfid.serNum[0],HEX);
Serial.print(rfid.serNum[1],HEX);
Serial.print(rfid.serNum[2],HEX);
Serial.print(rfid.serNum[3],HEX);
Serial.print(rfid.serNum[4],HEX);
Serial.println(" ");
ShowUser(rfid.serNum);
}
//选卡,可返回卡容量(锁定卡片,防止多数读取),去掉本行将连续读卡
Serial.println(rfid.selectTag(rfid.serNum));
}
rfid.halt();
}
void ShowCardType( unsigned char* type)
{
Serial.print("Card type: ");
if(type[0]==0x04&&type[1]==0x00)
Serial.println("MFOne-S50");
elseif(type[0]==0x02&&type[1]==0x00)
Serial.println("MFOne-S70");
elseif(type[0]==0x44&&type[1]==0x00)
Serial.println("MF-UltraLight");
elseif(type[0]==0x08&&type[1]==0x00)
Serial.println("MF-Pro");
elseif(type[0]==0x44&&type[1]==0x03)
Serial.println("MF Desire");
else
Serial.println("Unknown");
}
void ShowUser( unsigned char* id)
{
//EE9B 9C 38 D1
if(id[0]==0xB4 && id[1]==0x24 && id[2]==0x37 &&id[3]==0x5D ) {
Serial.println("HelloMary!");
state=RelayStatus(state);
}
elseif(id[0]==0x44 && id[1]==0x93 && id[2]==0xA8 &&id[3]==0x3A) {
Serial.println("Hello MicroHao!");
state=RelayStatus(state);
}
elseif(id[0]==0x24 && id[1]==0xC7 && id[2]==0xA7 &&id[3]==0x3B) {
Serial.println("Hello Tom!");
state=RelayStatus(state);
}
else{
Serial.println("Hello unkown guy!");
BlinkLED();
}
}
bool RelayStatus(bool status)
{
if(status)
{
digitalWrite(led, HIGH); // turnthe LED on (HIGH is the voltage level)
digitalWrite(relay,LOW);
return false;
}
digitalWrite(led, LOW); // turnthe LED on (HIGH is the voltage level)
digitalWrite(relay,HIGH);
return true;
}
void BlinkLED()
{
digitalWrite(relay,HIGH);
for(int i=0;i<3;i++)
{
digitalWrite(led, HIGH); // turnthe LED on (HIGH is the voltage level)
delay(1000);
digitalWrite(led, LOW); // turnthe LED off by making the voltage LOW
delay(1000);
}
}
|