指紋辨識器
註冊新指紋
#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("** 指紋儲存失敗 **");
}
}