|
RDM6300读卡模块8-9块一个,拿来做刷卡门锁模块不错,只是网上的代码挺麻烦的,卖家也表示自己优化代码。所以我发上来我优化的读卡代码,直接调用就可以返回卡号。
RDM6300读卡模块
原代码(卖家给的)
[kenrobot_code]long Password1=1111111;//稍后要改为读取到的卡号1
long Password2=2222222;//稍后要改为读取到的卡号2
int flag=0,RX_Flag=0;//串口标志
char Code[14]; //用于存放读到串口数据
long Num=0;//解码数据
int Door=0;
void Read_ID(void)
{
int i=0;
char temp;
for(i=0;(Serial.available()>0);i++) //串口有数据时>0,条件成立,for一直循环z
//while(Serial.available()>0) //Serial.available()获取串口接收缓冲区中字节数
{
temp=Serial.read(); //Serial.read()从串口缓冲区读取1字节数据,之后移除这1字节数据
Serial.print(temp);
delay(2);
Serial.println(i);
if(temp==0X02) //接收起始位
{
flag=1;i=0;RX_Flag=0;
}
if(flag==1) //检测到起始位,开始接收数据
{
if(temp==0X03) //检测到结束码,
{
flag=0; //标志清零
if(i==13) RX_Flag=1; //第13位为结束码,收到数据,标志置1
else RX_Flag=0;
break;
}
Code=temp;
}
}
flag=0; //标志清零
}
void setup()
{
pinMode(13,OUTPUT);
Serial.begin(9600);
}
void loop()
{
int i;
long temp=0,time=0;
RX_Flag=0;
while(1)
{
Read_ID();
if(RX_Flag==1)
{
for(i=5;i<11;i++)//数据解码,6位字符转为十六进制数,对应十进制卡号
{
Num<<=4;
if(Code>64) Num+=((Code)-55);
else Num+=((Code)-48);
Serial.println(Num);
}
Serial.println(Num);
if((Num==Password1)||(Num==Password2))//识别成功
{
digitalWrite(13,HIGH);
delay(5);
while(analogRead(Door)>400);
delay(1000);
digitalWrite(13,LOW);
delay(5);
}
// else 识别失败
// {
// digitalWrite(13,LOW);
// }
while(Serial.read()>0);//清除缓存区
RX_Flag=0;//标志位清零
Num=0;//数据清零
}
}
}[/kenrobot_code]
我优化了一下的,大家拿去做项目也简单
[kenrobot_code]void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println(Read_ID());
delay(1000);
}
long Read_ID() //RFID读卡模块 调取函数返回卡号
{
int flag=0,RX_Flag=0,i;
char Code[14];
long Num=0;
for(i=0;(Serial.available()>0);i++)
{
char temp=Serial.read();
delay(2);
if(temp==0X02)
{
flag=1;
i=0;
RX_Flag=0;
}
if(flag==1)
{
if(temp==0X03)
{
flag=0;
if(i==13)
{
RX_Flag=1;
}
else
{
RX_Flag=0;
}
break;
}
Code=temp;
}
}
flag=0;
if(RX_Flag==1)
{
for(i=5;i<11;i++)
{
Num<<=4;
if(Code>64)
{
Num+=((Code)-55);
}
else
{
Num+=((Code)-48);
}
}
//Serial.println(Num);
while(Serial.read()>0);
RX_Flag=0;
}
return Num;
}
[/kenrobot_code]
有错请指正,有更好的优化建议欢迎讨论。——日昏昏兮路遥遥
|
|