#include <SPI.h>
#include <Adafruit_Fingerprint.h>
#include <Wire.h>
#define RST_PIN 22
#define SS_PIN 5
#define BUZZER_PIN 13
#define RELAY_PIN 4
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2);
int fingerID = 0;
void setup() {
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
Serial.begin(115200);
SPI.begin();
finger.begin(57600);
// Ensure the lock is initially locked
digitalWrite(RELAY_PIN, LOW);
// Confirm fingerprint sensor is connected
if (finger.verifyPassword()) {
Serial.println("Fingerprint sensor found!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1);
}
}
void loop() {
// For demonstration, use the Serial Monitor to add/remove fingerprints
Serial.println("Press 'a' to add fingerprint, 'r' to remove fingerprint, 'c' to check fingerprint");
while (!Serial.available());
char choice = Serial.read();
switch (choice) {
case 'a':
addFingerprint();
break;
case 'r':
removeFingerprint();
break;
case 'c':
if (checkFingerprint()) {
unlockDoor();
} else {
Serial.println("Fingerprint not recognized");
tone(BUZZER_PIN, 500, 500); // Short beep for failure
}
break;
default:
Serial.println("Invalid option");
}
}
bool checkRFID() {
// Function to check RFID tag (implementation as per your requirements)
return false;
}
bool checkFingerprint() {
Serial.println("Place finger on sensor to check...");
int result = finger.getImage();
if (result != FINGERPRINT_OK) return false;
result = finger.image2Tz();
if (result != FINGERPRINT_OK) return false;
result = finger.fingerSearch();
if (result == FINGERPRINT_OK) {
Serial.print("Fingerprint ID: "); Serial.println(finger.fingerID);
return true;
}
return false;
}
void addFingerprint() {
Serial.println("Preparing to enroll fingerprint.");
Serial.println("Enter a number between 1 and 127 for the fingerprint ID:");
while (!Serial.available());
fingerID = Serial.parseInt();
if (fingerID < 1 || fingerID > 127) {
Serial.println("Invalid ID. Please choose a number between 1 and 127.");
return;
}
Serial.print("Enrolling fingerprint ID "); Serial.println(fingerID);
for (int i = 0; i < 2; i++) {
Serial.print("Place finger on sensor...");
while (finger.getImage() != FINGERPRINT_OK);
finger.image2Tz(i + 1);
Serial.println("Remove finger");
delay(2000);
}
int result = finger.createModel();
if (result == FINGERPRINT_OK) {
result = finger.storeModel(fingerID);
if (result == FINGERPRINT_OK) {
Serial.println("Fingerprint enrolled successfully!");
} else {
Serial.println("Error storing fingerprint");
}
} else {
Serial.println("Error creating fingerprint model");
}
}
void removeFingerprint() {
Serial.println("Enter fingerprint ID to remove:");
while (!Serial.available());
int idToRemove = Serial.parseInt();
if (finger.deleteModel(idToRemove) == FINGERPRINT_OK) {
Serial.println("Fingerprint removed successfully!");
} else {
Serial.println("Failed to remove fingerprint. Check ID and try again.");
}
}
void unlockDoor() {
digitalWrite(RELAY_PIN, HIGH); // Unlock the door
tone(BUZZER_PIN, 1000, 500); // Beep for half a second
delay(5000); // Keep the door unlocked for 5 seconds
digitalWrite(RELAY_PIN, LOW); // Lock the door again
}