#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <LiquidCrystal.h>
#include <SPI.h>
#define TFT_CS 9
#define TFT_RST 8
#define TFT_DC 10
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
#define WIDTH 320
#define HEIGHT 240
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
#define BUTTON1_PIN A1
#define BUTTON2_PIN A0
#define GREEN_LED_PIN A3
#define RED_LED_PIN A2
bool accessGranted = false;
void setup() {
lcd.begin(16, 2);
lcd.print("PLace Your");
lcd.setCursor(0, 1);
lcd.print("Finger...");
pinMode(BUTTON1_PIN, INPUT_PULLUP);
pinMode(BUTTON2_PIN, INPUT_PULLUP);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
tft.begin();
tft.setRotation(1);
tft.fillScreen(ILI9341_BLACK);
}
void loop() {
if (digitalRead(BUTTON1_PIN) == LOW) {
registerFingerprint();
}
if (digitalRead(BUTTON2_PIN) == LOW) {
if (accessGranted) {
accessGranted = false;
lcd.clear();
lcd.print("Your fingerprint");
lcd.setCursor(0, 1);
lcd.print("is being checked..");
delay(2000);
digitalWrite(RED_LED_PIN, HIGH);
lcd.clear();
lcd.print("Access denied");
drawLockIcon();
delay(3000);
digitalWrite(RED_LED_PIN, LOW);
lcd.clear();
lcd.print("Place your finger...");
} else {
verifyFingerprint();
}
}
}
void registerFingerprint() {
lcd.clear();
lcd.print("Fingerprint");
lcd.setCursor(0, 1);
lcd.print("registration");
delay(2000);
lcd.clear();
lcd.print("Please Add");
lcd.setCursor(0, 1);
lcd.print("your fingerprint..");
delay(2000);
lcd.clear();
lcd.print("Place same");
lcd.setCursor(0, 1);
lcd.print("finger again");
delay(2000);
lcd.clear();
lcd.print("Registration");
lcd.setCursor(0, 1);
lcd.print("completed");
delay(2000);
lcd.clear();
lcd.print("Place your finger");
}
void verifyFingerprint() {
lcd.clear();
lcd.print("Place your");
lcd.setCursor(0, 1);
lcd.print("fingerprint..");
delay(2000);
bool fingerprintMatch = true;
if (fingerprintMatch) {
lcd.clear();
lcd.print("Your fingerprint");
lcd.setCursor(0, 1);
lcd.print("is being checked..");
delay(2000);
digitalWrite(GREEN_LED_PIN, HIGH);
lcd.clear();
lcd.print("Access granted");
delay(1500);
digitalWrite(GREEN_LED_PIN, LOW);
displayPatternOnTFT();
accessGranted = true;
lcd.clear();
lcd.print("Welcome Mr.Baris");
delay(2000);
} else {
lcd.clear();
lcd.print("Access denied");
drawLockIcon();
digitalWrite(RED_LED_PIN, HIGH);
delay(3000);
digitalWrite(RED_LED_PIN, LOW);
lcd.clear();
lcd.print("Place your finger");
}
}
void displayPatternOnTFT() {
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
tft.drawPixel(x, y, x * y);
}
}
}
void drawLockIcon() {
tft.fillScreen(ILI9341_BLACK);
tft.drawCircle(160, 120, 40, ILI9341_WHITE);
tft.drawCircle(160, 120, 30, ILI9341_WHITE);
tft.drawCircle(160, 120, 20, ILI9341_WHITE);
tft.drawLine(130, 90, 190, 150, ILI9341_RED);
tft.drawLine(190, 90, 130, 150, ILI9341_RED);
}