指紋辨識器

註冊新指紋

#include <Adafruit_Fingerprint.h>

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

int id;

int p= -1; //配對參數


void setup(){

  Serial.begin(9600);

  finger.begin(57600); //指紋辨識包率必須使用57600已內定

  if (finger.verifyPassword()) { //驗證指紋模組是否接線正確

    Serial.println("***** 指紋辨識模組安裝完成 *****");

  } else {

    Serial.println(" 未發現指紋辨識模組,請檢查後重新啟動 ");

    while (1) { delay(1); }

  }

}

 

void loop() 

{

  Serial.println("==== 指紋感測模組 -- 指紋登錄器 ====");

  Serial.println(" 步驟一:請輸入登錄指紋 ID(1 to 127)**");

  id = readID(); // 登錄 ID 

  Serial.print(" 您輸入的 ID 為:#");

  Serial.println(id);

  Serial.println(" 步驟二:請將手指放置感測器上,並按下任一鍵開始登錄指紋 **");

  Image_taken();                            // 擷取指紋圖像

  Image_converted(1);                       // 轉換圖像後存成第 1 個圖像

  Serial.println(" 步驟三:請放上相同的手指後,並按下任一鍵 **");

  Image_taken();                            // 第二次擷取指紋圖像

  Image_converted(2);                       // 轉換圖像後存成第 2 個圖像 

  int match = Image_Model();                // 產生指紋模型

  delay(3000); 

  if(match == 0){

    Image_store();                          // 儲存指紋  

  }else {

    Serial.println(" 請重新操作一次 "); 

  } 

  Serial.println("============================"); 

} //loop


int readID(void) {

  int num = 0;

  while (1) {

    while (!Serial.available()){} //按空白鍵+Enter

      num = Serial.parseInt();

      if((num > 0)&&(num < 128)) { //檢查輸入是否在1~127

        break;

      } else {

      Serial.println(" 請重新輸入 1~127 數字 ");

      }

  }

  return num;

}


void Image_taken(){                         // 擷取指紋圖像 

  while(!Serial.available()){}              // 等待

  char ser = Serial.read();

  Serial.print(">>>> 處理中請稍後 ...."); 

  p = -1;

  p = finger.getImage();

  if(p == FINGERPRINT_OK) {

    Serial.println(" 指紋圖像擷取完成 >>>");

    Serial.println("**** 請移開手指 ****");

  }else{ 

    Serial.println("*** 指紋圖像錯誤 ***");

  } 

  delay(3000); 

}


void Image_converted(int i){

  p = finger.image2Tz(i);                       // 圖像轉換

  Serial.print(">>>> 圖像轉換中 ...");

  if(p == FINGERPRINT_OK) {

    Serial.println(" 圖像轉換完成 >>>");

  }else{

    Serial.println("*** 無效圖像 ***");

  } 

  delay(3000); 

}


int Image_Model(){

  Serial.print(">>>> 指紋配對中 ....");

  int s = finger.createModel();

  if ( s == FINGERPRINT_OK) {

    Serial.println(" 指紋配對完成 >>>");

    return s;

  } else {

    Serial.println(" 指紋配對失敗 ");

    return s;

  } 

}


void Image_store(){ 

  Serial.print(">>>> 指紋圖像儲存中 ..."); 

  p = finger.storeModel(id);                      // 儲存指紋圖像

  if (p == FINGERPRINT_OK) {

    Serial.println(" 儲存指紋完成 !");

  } else {

    Serial.println("** 指紋儲存失敗 **");

  } 

}