Document
Document
h>
#include <Adafruit_Fingerprint.h>
#include <Keypad.h>
#include <Wire.h>
#define FINGERPRINT_RX 2
#define FINGERPRINT_TX 3
#define GSM_RX 7
#define GSM_TX 8
#define BUZZER_PIN 5
char keys[ROWS][COLS] = {
};
#define LCD_HEIGHT 2
#define RELAY_PIN 4
void setup() {
Serial.begin(9600);
finger.begin(57600);
gsmSerial.begin(9600);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(BUZZER_PIN, LOW);
pinMode(TOUCH_PIN, INPUT_PULLUP); // Set the touch pin as input with internal pull-up resistor
// Initialize GSM
gsmSerial.println("AT");
delay(1000);
delay(1000);
delay(1000);
lcd.setCursor(0, 0);
lcd.print("Fingerprint Lock");
lcd.setCursor(0, 1);
lcd.print("Enter PIN:");
void loop() {
if (key != NO_KEY) {
lcd.print(key);
if (digitalRead(TOUCH_PIN) == LOW) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Touch detected!");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Fingerprint Lock");
lcd.setCursor(0, 1);
lcd.print("Enter PIN:");
if (key == '#') {
if (finger.verifyPassword()) {
if (fingerprintID == FINGERPRINT_OK) {
fingerprintID = finger.fingerID;
lcd.clear();
lcd.print("Fingerprint ID:");
lcd.setCursor(0, 1);
lcd.print(fingerprintID);
delay(2000);
lcd.clear();
if (checkFingerprint(fingerprintID)) {
lcd.print("Access granted!");
unlockDoor();
sendSMS("Access granted!");
} else {
lcd.print("Access denied!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Fingerprint Lock");
lcd.setCursor(0, 1);
lcd.print("Enter PIN:");
if (id == 1 || id == 2 || id == 3) {
return true;
} else {
return false;
}
void unlockDoor() {
digitalWrite(RELAY_PIN, HIGH);
digitalWrite(RELAY_PIN, LOW);
delay(1000);
gsmSerial.println(message);
delay(1000);
delay(1000);