久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1902|回復(fù): 1
收起左側(cè)

RC522讀卡歷程基于Arduino

[復(fù)制鏈接]
ID:379683 發(fā)表于 2019-7-1 22:05 | 顯示全部樓層 |閱讀模式
RC522讀卡歷程基于Arduino
  1. /*
  2. * --------------------------------------------------------------------------------------------------------------------
  3. * Example to change UID of changeable MIFARE card.
  4. * --------------------------------------------------------------------------------------------------------------------
  5. * This is a MFRC522 library example; for further details and other examples see: [url]https://github.com/miguelbalboa/rfid[/url]
  6. *
  7. * This sample shows how to set the UID on a UID changeable MIFARE card.
  8. * NOTE: for more informations read the README.rst
  9. *
  10. * @author Tom Clement
  11. * @license Released into the public domain.
  12. *
  13. * Typical pin layout used:
  14. * -----------------------------------------------------------------------------------------
  15. *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
  16. *             Reader/PCD   Uno/101       Mega      Nano v3    Leonardo/Micro   Pro Micro
  17. * Signal      Pin          Pin           Pin       Pin        Pin              Pin
  18. * -----------------------------------------------------------------------------------------
  19. * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
  20. * SPI SS      SDA(SS)      10            53        D10        10               10
  21. * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
  22. * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
  23. * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
  24. */
  25.   /*
  26.        Name:    AccessSystem.ino
  27.        Created: 2016/7/10 12:22:07
  28.        Author:  Fing
  29.   */

  30.       #include <SoftwareSerial.h>
  31.       #include <Servo.h>
  32.       #include <MFRC522.h>
  33.       #include <SPI.h>

  34.       /*自定義RC522的兩個(gè)PIN口*/
  35.       #define SS_PIN 10
  36.       #define RST_PIN 9

  37.       #define BT_RX 2   //藍(lán)牙模塊端口
  38.       #define BT_TX 1
  39.       #define SERVO_PIN 6   //舵機(jī)端口
  40.       #define BUZZ_PIN 4
  41.       #define CARDS 2   //已驗(yàn)證的卡片數(shù)目

  42.       MFRC522 mfrc522(SS_PIN, RST_PIN);   //新建RC522對(duì)象
  43.       SoftwareSerial BT(BT_TX, BT_RX);    //創(chuàng)建藍(lán)牙軟串口對(duì)象,避免沖突

  44.       Servo myservo;    //創(chuàng)建舵機(jī)對(duì)象
  45.       bool isAuthed = false;    //驗(yàn)證是否通過(guò)
  46.       const byte AuthedID[1][4] = {0x66,0xA8,0x14,0xF9};  //可以保存多個(gè)卡片UID值
  47.       char val;   //用來(lái)存儲(chǔ)藍(lán)牙接收數(shù)據(jù)

  48.       void setup() {
  49.         Serial.begin(9600);//串口,波特率9600
  50.         BT.begin(9600);   //藍(lán)牙串口,波特率9600
  51.         myservo.attach(SERVO_PIN);    //連接舵機(jī)
  52.         SPI.begin();    //初始化SPI總線
  53.         mfrc522.PCD_Init();   //初始化MFRC522卡
  54.         pinMode(BUZZ_PIN, OUTPUT);    //初始化蜂鳴器
  55.         digitalWrite(BUZZ_PIN, HIGH);
  56.         myservo.write(45);
  57.         Serial.println(F("This code scan the MIFARE Classsic NUID."));
  58.         Serial.print(F("Using the following key:"));
  59.       }

  60.       // the loop function runs over and over again until power down or reset
  61.       void loop()
  62.       {
  63.         Authenticate();
  64.         if (isAuthed) {
  65.           OpenDoor();
  66.           BeepChecked();
  67.           delay(3000);
  68.           isAuthed = false;
  69.         }
  70.         CloseDoor();
  71.         isAuthed = false;
  72.         BTCheck();
  73.         delay(500);
  74.       }


  75.       //Servo開(kāi)關(guān)門(mén)
  76.       void OpenDoor()
  77.       {
  78.         myservo.write(140);
  79.       }

  80.       void CloseDoor()
  81.       {
  82.         myservo.write(45);
  83.       }

  84.       //驗(yàn)證卡片
  85.       void Authenticate()
  86.       {
  87.         //檢測(cè)是否有新卡片
  88.         if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) {
  89.           delay(50);
  90.           return;
  91.         }

  92.         //進(jìn)行卡片驗(yàn)證
  93.         for (byte num = 0; num < CARDS; num++)    //卡片循環(huán)  
  94.         {      
  95.           byte i;
  96.           for (i = 0; i < mfrc522.uid.size; i++)
  97.           {           
  98.             if (mfrc522.uid.uidByte[i] != AuthedID[num][i]) break;
  99.           }
  100.           Serial.println(F("The NUID tag is:"));
  101.           Serial.print(F("In hex: "));
  102.           printHex(mfrc522.uid.uidByte, mfrc522.uid.size);
  103.           Serial.println();
  104.           Serial.print(F("In dec: "));
  105.           printDec(mfrc522.uid.uidByte, mfrc522.uid.size);
  106.           Serial.println();
  107.           if (i == mfrc522.uid.size)
  108.           {
  109.             isAuthed = true;    //驗(yàn)證通過(guò)
  110.             break;
  111.           }
  112.           else if (num == CARDS - 1) {
  113.             BeepFailed();
  114.           }

  115.         }
  116.       }

  117.       //藍(lán)牙掃描
  118.       void BTCheck() {
  119.         if (BT.available()) {
  120.           val = BT.read();
  121.           if (val == '1') {
  122.             OpenDoor();
  123.             BeepChecked();
  124.             delay(3000);
  125.             isAuthed = false;
  126.           }
  127.           val = 0;
  128.         }
  129.       }

  130.       void BeepChecked() {
  131.         digitalWrite(BUZZ_PIN, LOW);
  132.         delay(200);
  133.         digitalWrite(BUZZ_PIN, HIGH);
  134.       }

  135.       void BeepFailed() {
  136.         digitalWrite(BUZZ_PIN, LOW);
  137.         delay(100);
  138.         digitalWrite(BUZZ_PIN, HIGH);
  139.         delay(100);
  140.         digitalWrite(BUZZ_PIN, LOW);
  141.         delay(100);
  142.         digitalWrite(BUZZ_PIN, HIGH);
  143.       }
  144.       void printHex(byte *buffer, byte bufferSize) {
  145.       for (byte a = 0; a < bufferSize; a++) {
  146.             Serial.print(buffer[a] < 0x10 ? " 0" : " ");
  147.             Serial.print(buffer[a], HEX);
  148.           }
  149.         }

  150.         /**
  151.          * Helper routine to dump a byte array as dec values to Serial.
  152.          */
  153.        void printDec(byte *buffer, byte bufferSize) {
  154.        for (byte a = 0; a < bufferSize; a++) {
  155.             Serial.print(buffer[a] < 0x10 ? " 0" : " ");
  156.             Serial.print(buffer[a], DEC);
  157.           }
  158.         }
復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2019-7-2 15:42 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费一区| 国产精品美女久久久久久久久久久 | 久久成人一区 | 国产一二三区精品视频 | 亚洲国产精品视频 | 国产三级 | 男女爱爱网站 | 青青草视频网 | 午夜影院在线 | 一本色道精品久久一区二区三区 | 欧美性高潮| 韩日一区二区三区 | 欧美成人性生活 | 日韩视频精品在线 | 成人av鲁丝片一区二区小说 | 久久精品91| 天天摸天天干 | 欧美一区二区三区久久精品视 | 亚洲风情在线观看 | 97国产精品 | 久久精品亚洲成在人线av网址 | 男人天堂社区 | 国产精品一区一区三区 | 一区二区在线免费观看 | 国产99久久 | 成av人电影在线 | 午夜爱爱毛片xxxx视频免费看 | 久久精品久久久久久 | 久久精品一区二区三区四区 | 国产精品视频一 | 精品久久久久久亚洲综合网 | 亚洲一级毛片 | 亚洲一二三区不卡 | 中文字幕一区二区三区精彩视频 | 一级日批片 | 欧美一区二区在线 | 91极品尤物在线播放国产 | 孰女乱色一区二区三区 | 国产精品一区久久久 | 午夜大片 | 欧美成人性生活 |