代码如下 long Password1=11402124;//可识别卡号1,此处修改卡号 long Password2=7927290;//可识别卡号2,此处修改卡号 int flag=0,RX_Flag=0;//串口标志 char Code[14]; //用于存放读到串口数据 long Num=0;//解码数据 int serpin=7;//舵机引脚定义 int Door=0; void Read_ID(void) { int i=0; char temp; for(i=0;(Serial.available()>0);i++)// 串口空闲 //while(Serial.available()>0) { temp=Serial.read(); 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[i]=temp; } } flag=0;//标志清零 } void pulse( int serpin,int angle) { int width;//舵机输出脉宽 width=(angle*11)+500;//将角度转化为500-2480的脉宽值 digitalWrite(serpin,HIGH);//将舵机接口电平至高 delayMicroseconds(width);//延时脉宽值的微秒数 digitalWrite(serpin,LOW);//将舵机接口电平至低 delay(20-width/1000); } void setup() { pinMode(13,OUTPUT); pinMode(serpin,OUTPUT); Serial.begin(9600); Serial.println("This is a test for access control system"); delay(100); Serial.println(Password1); } 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[i]>64) Num+=((Code[i])-55); else Num+=((Code[i])-48); Serial.println(Num); } Serial.println(Num); if((Num==Password1)||(Num==Password2))//识别成功 { digitalWrite(13,HIGH); delay(5); for(int i=0;i<=50;i++)//给予舵机足够的时间让它转到指定角度 { pulse(serpin,20);//引用脉冲函数 } delay(2000); while(analogRead(Door)>400); delay(1000); digitalWrite(13,LOW); delay(5); for(int i=0;i<=50;i++)//给予舵机足够的时间让它转到指定角度 { pulse(serpin,180);//引用脉冲函数 } } // else 识别失败 // { // digitalWrite(13,LOW); // for(int i=0;i<=50;i++)//给予舵机足够的时间让它转到指定角度 // { // pulse(serpin,90);//引用脉冲函数 // } // } while(Serial.read()>0);//清除缓存区 RX_Flag=0;//标志位清零 Num=0;//数据清零 } } } |
贴吧看到的帖子转过来大家分享一下http://tieba.baidu.com/p/3207413424(原帖地址) RDM6300是一款能读125K RFID卡的模块,我们可以利用此身份识别功能结合舵机完成门禁的设计。今天就详细介绍其具体实现方法。 所需配件: 电源方面还需要一根micro数据线和一个移动电源。 步骤 1. 读取卡号: Rdm6300是直接串口读取卡信息的,包括卡号。所以取号很简单,硬件连接如下: 打开arduino IDE烧写一段空程序即可使用串口监视器查看卡号: void setup(){} void loop(){} 复制卡号,记下来。多张卡,就记下多个号。 2. 烧写固件: 下面开始进入主题了! 先给Nano烧写此次的门禁代码,因为我们的是micro的接口,所以要用micro的USB数据线。 纯代码,无需调用库,当然代码方面还可以优化,这个就交给大家来完善吧。 代码在下边给出 逻辑设计:RDM6300识别到正确的卡号后,舵机旋转180度开门,如果门没被推开,磁传感器还能感应到磁力,3秒后舵机归位锁门;如果读卡成功,推门进入,磁传感器感应不到磁力,舵机保持180度开门状态,关上门,磁传感器感应到磁力,延时一秒舵机归位锁门。 使用时需将待识别的卡号修改为自己的,可自行添加多个可识别的卡号。 3. 硬件连接: 按图链接主控板Iteaduino NANO和RDM6300模块及舵机,如图1所示,用硬件串口读取RDM6300所识别的卡号,用数字输出脚7脚输出PWM波控制舵机,A0取磁传感器的值。Nano刚好有3对电源脚。 下面是uno的接线示意图,可以不用到磁开关,看个人实际应用吧。 最终效果如图,当然小伙伴们可以用个盒子把配件都装起来。 相关产品资料下载: RDM6300 ID读卡模块: 视频连接 http://v.youku.com/v_show/id_XNzQ5Nzg2Mzg4.html |