0% found this document useful (0 votes)
14 views7 pages

Unlockdoor

Uploaded by

Đào Cường
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views7 pages

Unlockdoor

Uploaded by

Đào Cường
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 7

//#include <Key.

h>
#include <Keypad.h>
#include <Adafruit_Fingerprint.h>
#include <HardwareSerial.h>
#define RX_PIN 16 // Chân RX của ESP32 nối với TX của cảm biến vân tay
#define TX_PIN 17 // Chân TX của ESP32 nối với RX của cảm biến vân tay
#define relayPin 23//mới thêm
uint8_t id ; // Khai báo biến id
boolean mode = 0; // Khai báo biến mode (0: chế độ quét, 1: chế độ lưu)
const byte ROWS = 4; // Số hàng của keypad
const byte COLS = 4; // Số cột của keypad

// Định nghĩa các phím trên keypad


char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};

// Chân nối keypad với ESP32


byte rowPins[ROWS] = {13, 12, 14, 27}; // connect to the row pinouts of the keypad
byte colPins[COLS] = {26, 25, 33, 32}; // connect to the column pinouts of the
keypad
// Tạo đối tượng keypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2);
void setup() {
pinMode(relayPin, OUTPUT);// mới thêm
digitalWrite(relayPin, HIGH);
Serial.begin(57600);
delay(100);

// Khởi tạo mySerial (Serial2) với chân RX, TX được khai báo ở trên
Serial2.begin(57600, SERIAL_8N1, RX_PIN, TX_PIN); // Khai báo tốc độ baud rate và
chân RX, TX

Serial.println("\nAdafruit Fingerprint Sensor Enrollment");


finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); } // Dừng lại ở đây nếu không tìm thấy cảm biến
}
Serial.println(F("Reading sensor parameters"));
finger.getParameters();
Serial.print(F("Status: 0x")); Serial.println(finger.status_reg, HEX);
Serial.print(F("Sys ID: 0x")); Serial.println(finger.system_id, HEX);
Serial.print(F("Capacity: ")); Serial.println(finger.capacity);
Serial.print(F("Security level: ")); Serial.println(finger.security_level);
Serial.print(F("Device address: ")); Serial.println(finger.device_addr, HEX);
Serial.print(F("Packet len: ")); Serial.println(finger.packet_len);
Serial.print(F("Baud rate: ")); Serial.println(finger.baud_rate);
}
uint8_t readnumber(void) {
uint8_t num = 0;
while (num == 0) {
while (!Serial.available());
num = Serial.parseInt();
}
return num;
}

void loop() {
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
switch (customKey) {
case 'A': // Add fingerprint
Serial.println("Add fingerprint mode selected.");
mode = 0;
delay(3000);
addFingerprint();
mode = 1;
break;

case 'B': // Erase fingerprint selected


Serial.println("Erase fingerprint # ");

DeleteChooseFingerprint();
delay(3000);
break;

case 'C': // Erase fingerprint database


Serial.println("Erase fingerprint database mode selected.");
eraseFingerprints();
delay(2000);
break;

case 'D': // Check fingerprint


Serial.println("Check fingerprint mode selected.");
delay(3000);
checkFingerprint();
break;

case '*': // Check fingerprint and unlock relay


Serial.println("Unlock door mode selected.");
delay(3000);
checkFingerprintAndUnlock();
break;

default:
// Serial.println("Waiting key pressed...");
// delay(2000);
break;

if (mode == 0) {
getFingerprintID();
}
}

void DeleteChooseFingerprint() {
Serial.println("Enter the ID to delete (1-127):");

// Đọc ID từ keypad
uint8_t deleteID = readIDFromKeypad();
// Thực hiện xóa ID
int p = finger.deleteModel(deleteID);
if (p == FINGERPRINT_OK) {
Serial.print("Fingerprint with ID ");
Serial.print(deleteID);
Serial.println(" deleted successfully.");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error while deleting fingerprint.");
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println("Could not delete fingerprint at this location.");
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println("Error writing to flash.");
} else {
Serial.println("Unknown error.");
}
}

void eraseFingerprints() {
Serial.println("Erasing all fingerprints...");
finger.emptyDatabase();
Serial.println("All fingerprints erased.");
}

uint8_t addFingerprint() {
int p = -1;
Serial.println("Ready to enroll a fingerprint!");
Serial.println("Please type in the ID # (from 1 to 127) you want to save this
finger as...");
// Bắt đầu quá trình thêm vân tay
id = readIDFromKeypad(); // Nhập ID từ keypad
Serial.print("Waiting for valid finger to enroll as #");
Serial.println(id);
delay(2000);
// Lấy ảnh lần đầu tiên
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.print(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
break;
default:
Serial.println("Unknown error");
break;
}
}

// Chuyển đổi ảnh lần đầu tiên


p = finger.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}

Serial.println("Remove finger");
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
p = finger.getImage();
}

Serial.print("ID ");
Serial.println(id);
p = -1;
Serial.println("Place same finger again");
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.print(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
break;
default:
Serial.println("Unknown error");
break;
}
}

// OK success!
p = finger.image2Tz(2);
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}

// OK converted!
Serial.print("Creating model for #");
Serial.println(id);

p = finger.createModel();
if (p == FINGERPRINT_OK) {
Serial.println("Prints matched!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
Serial.println("Fingerprints did not match");
return p;
} else {
Serial.println("Unknown error");
return p;
}

Serial.print("ID ");
Serial.println(id);
p = finger.storeModel(id);
if (p == FINGERPRINT_OK) {
Serial.println("Stored!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println("Could not store in that location");
return p;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println("Error writing to flash");
return p;
} else {
Serial.println("Unknown error");
return p;
}
}

uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) {
return p;
}

p = finger.image2Tz();
if (p != FINGERPRINT_OK) {
return p;
}

p = finger.fingerSearch();
if (p == FINGERPRINT_OK) {
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence "); Serial.println(finger.confidence);
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Fingerprint not found");
} else {
Serial.println("Error reading fingerprint");
}

return finger.fingerID;
}

void checkFingerprint() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) {
Serial.println("No finger detected. Please try again.");
return;
}

p = finger.image2Tz();
if (p != FINGERPRINT_OK) {
Serial.println("Failed to convert image. Please try again.");
return;
}

p = finger.fingerSearch();
if (p == FINGERPRINT_OK) {
Serial.print("Fingerprint exists in the database with ID #");
Serial.print(finger.fingerID);
Serial.print(" and confidence ");
Serial.println(finger.confidence);
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Fingerprint not found in the database.");
} else {
Serial.println("Error while searching for fingerprint.");
}
}
void checkFingerprintAndUnlock() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) {
Serial.println("No finger detected. Please try again.");
return;
}

p = finger.image2Tz();
if (p != FINGERPRINT_OK) {
Serial.println("Failed to convert image. Please try again.");
return;
}

p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
Serial.print("Fingerprint exists in the database with ID #");
Serial.print(finger.fingerID);
Serial.print(" and confidence ");
Serial.println(finger.confidence);
Serial.println("Unlocking the door...");
digitalWrite(relayPin, LOW); // Bật relay để mở cửa
Serial.println(" Door unlocked! ");
delay(100); // Giữ relay bật trong 100ms (cửa mở)
digitalWrite(relayPin, HIGH); // Tắt relay để đóng cửa
Serial.println("Door locked.");}
}

uint8_t readIDFromKeypad() {
String input = ""; // Chuỗi lưu giá trị nhập
char key;
Serial.println("Enter the ID using keypad (1-127), press # to confirm:");

while (true) {
key = customKeypad.getKey(); // Đọc phím bấm từ keypad
if (key) {//ktra dk phím được nhấn
if (key == '#') { // Xác nhận bằng phím #
if (input.length() > 0) {
uint8_t idValue = input.toInt(); // Chuyển chuỗi sang số
if (idValue >= 1 && idValue <= 127) { // Kiểm tra giới hạn ID
Serial.print("ID entered: ");
Serial.println(idValue);
return idValue; // Trả về giá trị ID
} else {
Serial.println("Invalid ID! Enter a number between 1 and 127.");
input = ""; // Reset input
}
}
} else if (isdigit(key)) { // Kiểm tra nếu là số
if (input.length() < 3) { // Chỉ nhận tối đa 3 ký tự
input += key; // Thêm ký tự vào chuỗi
Serial.print(key); // In ký tự ra Serial Monitor
}
} else {
Serial.println("\nInvalid key pressed. Use numbers or # to confirm.");
}
}
}
}

You might also like