Arduino nano ID门禁卡

 本来该文章与2021_5_21完成,由于我今天更新代码时候导致文章被我搞坏了,重新写一遍

一.材料:

1.arduino nano (最近涨价了,推荐大家去买esp32)

2.RFID读卡器

3.9宫格按键(软面板)

4.15kg舵机

5. 蜂鸣器

二 .主要实现功能,可以注册删除5张ID卡,实现刷卡,通信给arduino,控制舵机,完成机械动作来实现开门目的。

 

三.端口解析

1.和刷卡器之间用了rx,tx通信,貌似用其中一根线就可以使用 4号引脚接刷卡器的跳变电平

2.和舵机控制,使用了5号引脚(通过修改这句话来自定义#define PIN_SERVO 5)

3.键盘,x三个,y四个,分别使用 了(int x1=10,x2=11,x3=12;    //按键定义)

(int y1=6,y2=7,y3=8,y4=9;  //按键定义)因为这个案件键盘是一排查插的,我按着方便就这样使用了,

3.1 蜂鸣器用了13号引脚

4.采用了舵机库,擦写寄存器库,然后就没啥了,舵机库你们网上找一下吧,找不到再说嘛

程序内有很多详细的注释,

大致结构我说一下嘛,方便大家参考

4.1 setup定义接口

4.2 loop开始循环检测刷卡,和删除卡,注册卡

4.3 读卡解析代码段

4.4 读用户号码代码

4.5 写用户号码代码

4.6 删除用户代码段

4.7 AAA()按键的内容赋值解析

4.8  KM()开门关门舵机控制代码

4.9  蜂鸣器调用代码

四 .

这个代码在实际运用过程中,已经优化了三次左右了。偶尔会出现没人刷卡,系统监测返回卡号了,我也十脸懵逼

但是不至于打开门,希望能给大家带来帮助

 

//****************************************************************************以下是ID门禁卡测试程序*****************************************************************************
//此程序具有注册卡,删除卡功能,能存5张用户卡,配合刷卡通信模块,配合按键模块,配合一个蜂鸣器,还有一个舵机,机械开门来实现目的
//当没有按键盘的时候,循环检测刷卡,周期200毫秒,当有人按键盘,开始检测,是否注册或删除用户,当没人按键盘,时候检测刷卡,有人刷卡,马上读取储存的用户,开始1对一进行比较,从用户1对比到用户5,如正确与卡号无误
//开始执行开门,开门执行舵机开动作,随后延时关门,然后继续循环检测刷卡,和按键,(读卡细节:当收到有人刷卡的信号,才开始读卡,否侧处于循环检测按键面板程序,有利于高效通讯,不必每次循环都去读一遍串口)



#include <EEPROM.h>
#include <Wire.h>
#include <Servo.h>
#define PIN_SERVO 5
Servo myservo;
String comdata="";
int IP=4;                 //4号VT电平脚
int Buzzer=13;
int z,o,u,ba,bb,bc,bd;    //循环时间变量
int a,b,c,d,e,f,g,h,i,j;  //用来赋值读取门禁参数
int A,B,C,D,E,F,G,H,I,J;  //用来读存储的用户参数
int AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ;  //用来写入储存变量
int x1=10,x2=11,x3=12;    //按键定义
int y1=6,y2=7,y3=8,y4=9;  //按键定义
int user=0;              //用户号
int readd=1;             //读1-5位用户
int delate=0;            //删除1-5位用户
int pp=0,po=0,pl=0;
int time1=7;
int DD=0;
int v;

//数据存储1-50,存储了5位用户的卡号,61-65储存了5位用户的状态,61=1,代表有用户,61=0代表没有用户。
void setup(){
  Serial.begin(9600);
    pinMode(IP,INPUT);   //4
    pinMode(y1,OUTPUT);  //6
    pinMode(y2,OUTPUT);  //7
    pinMode(y3,OUTPUT);  //8
    pinMode(y4,OUTPUT);  //9
    pinMode(x1,INPUT);  //10
    pinMode(x2,INPUT);  //11
    pinMode(x3,INPUT);  //12
    pinMode(Buzzer,OUTPUT);  //13
    myservo.attach(PIN_SERVO);  //5
    delay(10);
    myservo.write(0);
}

void loop(){
  
 AAA(); //用来检查面板是否被按  8毫秒检测面板
        //以下注册用户,删除用户程序----------------------------------------------------------------------------------------------------------------------------
 if(pp>=1&&pp<=10){ // 证明面板被按了
//  Serial.print("                                          pp=");Serial.println(pp);
  pp=0; //面板的数字
  po=0; //#确认按键
  pl=0; //*号按键
  
          for(o=0;o<=80;o++)
          {  
            AAA();// Serial.print(o); Serial.print("正在确认是否按了确认按键,此时pp,po分别为---");Serial.print(pp);Serial.print("---");Serial.println(po);
            if(po==10){ //Serial.println("--------有人按了确认,现在开始检测添加还是删除");
            //判断按1,再次按*号按键,准备写入用户,8秒循环
            pp=0;po=0;pl=0;
            for(bd=0;bd<=80;bd++){
                       AAA();
                       if(
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值