指紋門禁鎖

指紋控制解鎖+蜂鳴器+繼電器+LED

#include <Adafruit_Fingerprint.h>

#define mySerial Serial1

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); //使用TX1,RX1所以使用Serial1,如果使用TX2,RX2可使用Serial2 

int ID = 0;

int BZ = 4;       // 蜂鳴器接腳

int LED = 3;      // LED接腳

int relay = 2;    // 繼電器接腳


void setup(){

  Serial.begin(9600);

  finger.begin(57600);

  if (finger.verifyPassword()) {        // 檢查指紋感測器模組接線是否正確

    Serial.println("發現指紋感測模組!");

  } 

  else {

    Serial.println(" 未發現指紋感測模組,請檢查接線後重新啟動 ");

    while (1) { delay(1); }

  }

  pinMode(BZ,OUTPUT);

  pinMode(LED,OUTPUT);

  pinMode(relay,OUTPUT);

  digitalWrite(relay,HIGH);       // 繼電器初始狀態

  digitalWrite(LED,HIGH);         // LED初始狀態

}


void loop(){

  ID = getID();                       // 配對指紋並傳回 ID 值

  delay(50);

  if (ID > 0){                        // 手指放上指紋感測模組

    if((ID == 1 )||(ID == 2 )||(ID == 3 )){   // ID=1.2.3 的指紋圖像驗證成功

      Serial.println("**** 指紋驗證正確 ****"); 

      tone(BZ,300,300);              // 蜂鳴器動作0.2秒兩次

      delay(250);

      tone(BZ,500,300); 

      digitalWrite(relay,LOW);        // 繼電器動作

      digitalWrite(LED,LOW);          // LED動作

      delay(3000);                    // 延遲5秒

      digitalWrite(relay,HIGH);       // 繼電器跳脫

      digitalWrite(LED,HIGH);         // LED跳脫

    } 

    else {                            // 指紋驗證失敗

      Serial.println("===== 指紋驗證錯誤 ====="); 

      tone(BZ,1200,200);              // 蜂鳴器動作0.2秒兩次

      delay(250);

      tone(BZ,1500,200); 

    }

  }

  while(ID > 0) {                     // 等待手指放開

    ID = getID();                     // 配對指紋並傳回 ID 值 

  }


int getID() {                         // 比對指紋,取得正確的 ID 碼

  int p = finger.getImage();          // 指紋圖像

  if (p != FINGERPRINT_OK) return -1;

  p = finger.image2Tz();              // 指紋圖像處理

  if (p != FINGERPRINT_OK) return -2;

  p = finger.fingerFastSearch();      // 搜尋指紋

  if (p != FINGERPRINT_OK) return 999;  //未搜尋到指紋

  return finger.fingerID; 

}