查看: 26773|回复: 123

周哥玩arduino之基于arduino的门禁系统V3.0

  [复制链接]
  • TA的每日心情
    开心
    2019-1-3 13:34
  • 签到天数: 65 天

    [LV.6]常住居民II

    发表于 2017-8-17 09:56 | 显示全部楼层 |阅读模式
    本帖最后由 ac-dc 于 2017-9-3 19:21 编辑

    好,今天发布了3.0修改版哈


    先上代码:
    [kenrobot_code]/*
       RC522门禁系统V2.0
       by ac-dc
       接线:
       RC522:     ARDUINO
       SDA<------->D10
       SCK<------->D13
       MOSI<------>D11
       MISO<------>D12
       RST<------->D9
       IRQ<------->不接
       3V3<------->3.3V(千万不能接5V)
       GND<------->GND
       LCD:       ARDUINO
       SCL<------->SCL
       SDA<------->SDA                      LED&BUZZER:   
       RED<------->D3
       GREEN<-->D2
       BUZZER<>D4
    */
    #include <LiquidCrystal_I2C.h>
    #include <Wire.h>
    #include <SPI.h>
    #include <RFID.h>

    RFID rfid(10, 9);  //实例化一个读卡器,10是读卡器SS引脚、9是读卡器RST引脚
    LiquidCrystal_I2C lcd(0x3F, 16, 2);//实例化一个LCD1602(不要问我为什么不是2004),地址是0x3F,一排可以显示16个字符,可以显示两排

    #define Host 2//要修改人员数量就修改这里
    boolean u = 0;//程序需要(下面会讲)

    int host[Host][5] = { //人员数据
      {0x24, 0xA7, 0x49, 0xF2, 0x38},
      {0xBA, 0xE9, 0x94, 0x59, 0x9E},
    };

    void setup() {
      // put your setup code here, to run once:
      pinMode(2, OUTPUT); //绿灯(如果读出的卡是对的,那么就亮绿灯)
      pinMode(3, OUTPUT);//红灯(如果读出的卡是错的,那么就亮红灯)
      pinMode(4, OUTPUT);
      Serial.begin(9600);
      SPI.begin();
      rfid.init();
      lcd.init();
      lcd.backlight();
      lcd.print(" Welcome to use ");
      delay(700);
      lcd.clear();
      lcd.print("Put card here");
    }

    void loop() {

      if (rfid.isCard()) {//读到了卡
        Serial.println("Find the card!");
        //读取卡序列号
        if (rfid.readCardSerial()) {
          Serial.print("The card's number is  : ");
          Serial.print(rfid.serNum[0], HEX);
          Serial.print(" ");
          Serial.print(rfid.serNum[1], HEX);
          Serial.print(" ");
          Serial.print(rfid.serNum[2], HEX);
          Serial.print(" ");
          Serial.print(rfid.serNum[3], HEX);
          Serial.print(" ");
          Serial.print(rfid.serNum[4], HEX);
          Serial.println(" ");
          for (int i = 0; i < Host; i++) {
            if (rfid.serNum[0] == host[0] && rfid.serNum[1] == host[1]  && rfid.serNum[2] == host[2] && rfid.serNum[3] == host[3]  && rfid.serNum[4] == host[4] ) {
              digitalWrite(2, HIGH);//亮绿灯,放行
              u = 1;//这里为了标记读到了列表中的卡
              lcd.clear();
              lcd.home();
              lcd.print("  The Host");
              lcd.print(i);
              lcd.setCursor(0, 1);
              lcd.print("Welcome go back!");
              delay(10);
              tone(4, 300);
              delay(200);
              tone(4, 1200);
              delay(200);
              noTone(4);
              digitalWrite(3, LOW);
              delay(590);
              lcd.clear();
              lcd.home();
              lcd.print("Put card here");
              digitalWrite(2, LOW);//绿灯灭
            }
          }
          if (!u) { //如果读到的卡不在列表中,那么执行下面程序
            digitalWrite(3, HIGH);//红灯亮,不放行(哈哈哈)
            tone(4, 200);//播放错误声(有点像答错了的声音)
            lcd.clear();//清屏,为了报错
            lcd.home();
            lcd.print("Unkonw card");
            delay(700);
            digitalWrite(3, LOW);
            noTone(4);
            delay(300);
            lcd.clear();
            lcd.home();
            lcd.print("Put card here");

          }   
          rfid.selectTag(rfid.serNum);//选卡,可返回卡容量(锁定卡片,防止多数读取),去掉本行将连续读卡
        }
        rfid.halt();
        u = 0; //为了下一次读卡准备
      }
    }[/kenrobot_code]





    咳咳咳,我们现在来说说程序原理:   
    先初始化(setup)---------->找卡---------->验证---------->显示(然后回到找卡这一部分)






    效果图: 1503015025372..jpg 1503014968484..jpg 1503014917182..jpg
    周哥系列文章:
    基于arduino的门禁系统V3.0 (出处:arduino中文社区)
    基于arduino的门禁系统V2.0 (出处:arduino中文社区)
    基于arduino的门禁系统V1.0 (出处:arduino中文社区)











  • TA的每日心情
    开心
    2019-1-3 13:34
  • 签到天数: 65 天

    [LV.6]常住居民II

     楼主| 发表于 2017-8-17 14:53 | 显示全部楼层
    自己坐沙发
  • TA的每日心情
    开心
    2019-10-11 09:30
  • 签到天数: 755 天

    [LV.10]以坛为家III

    发表于 2017-8-17 17:18 | 显示全部楼层
    给楼主点个赞
    打赏作者鼓励一下!
  • TA的每日心情
    开心
    2019-1-3 13:34
  • 签到天数: 65 天

    [LV.6]常住居民II

     楼主| 发表于 2017-8-17 17:20 | 显示全部楼层

    谢赞

    该用户从未签到

    发表于 2017-8-17 21:32 | 显示全部楼层
    急急急急急急积极12345678
  • TA的每日心情
    开心
    2018-9-20 15:06
  • 签到天数: 279 天

    [LV.8]以坛为家I

    发表于 2017-8-18 14:24 | 显示全部楼层
    搞定3.0了?真不错~
    打赏一点,努力一点

    该用户从未签到

    发表于 2017-8-18 14:55 | 显示全部楼层
    666666666666666

    该用户从未签到

    发表于 2017-8-18 16:45 | 显示全部楼层
    很6啊,必须点赞
  • TA的每日心情

    2017-11-23 12:09
  • 签到天数: 73 天

    [LV.6]常住居民II

    发表于 2017-8-19 20:30 | 显示全部楼层
    脚趾头靓了
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【Arduino】108种传感器系列实验(11)---金属触摸传感器模块
    【Arduino】108种传感器系
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    GRBL sender 自己制作的控制软件
    GRBL sender 自己制作的控
    网上找了许多GRBL控制软件都不理想,于是决定自己动手做一个,这是第一版,功能有限,
    Arduino模拟USB键盘
    Arduino模拟USB键盘
    [md] ### 模拟键盘输入信息 本示例将演示使用Arduino Leonardo模拟USB键盘输出信息。
    免费高效的PCB工具
    免费高效的PCB工具
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表