#include <Adafruit_Fingerprint.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#define bz 12
#define servo 13;
#define touch 5;
Servo myServo;
LiquidCrystal_I2C lcd(0x27,16,2);
// กำหนดพอร์ต Serial ที่จะใช้สื่อสารกับเซ็นเซอร์ลายนิ้วมือ
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2);
void setup() {
Serial.begin(57600);
finger.begin(57600);
pinMode(touch, INPUT);
pinMode(bz, OUTPUT);
if (finger.verifyPassword()) {
Serial.println("ตรวจพบเซ็นเซอร์ลายนิ้วมือ DY50!");
} else {
Serial.println("ไม่สามารถเชื่อมต่อกับเซ็นเซอร์ลายนิ้วมือได้ :(");
while (1) { delay(1); } // หยุดโปรแกรม
}
lcd.init();
lcd.backlight();
myServo.attach(servo);
myservo.write(0);
}
void loop() {
// ตัวอย่างการบันทึกลายนิ้วมือ
if (Serial.available()) {
char option = Serial.read();
switch (option) {
case 'e': // Enroll
Serial.println("บันทึกลายนิ้วมือ:");
enrollFingerprint();
break;
case 'v': // Verify
Serial.println("ตรวจสอบลายนิ้วมือ:");
verifyFingerprint();
break;
case 'd': // Delete
Serial.println("ลบลายนิ้วมือ:");
deleteFingerprint();
break;
default:
Serial.println("คำสั่งไม่ถูกต้อง โปรดใช้ 'e', 'v', หรือ 'd'");
break;
}
}
int touchState = digitalRead(touch);
if (touchState == HIGH) {
tone(bz,500);
delay(1000);
lcd.setCursor(1,1);
lcd.print("Unlock the door");
myservo.write(180);
delay(10000);
myservo.write(0);
delay(1000);
} else {
noTone(bz);
lcd.setCursor(1,1);
lcd.print("Lock the door");
}
}
void enrollFingerprint() {
int id = 1; // สามารถเปลี่ยนเป็น ID ที่ต้องการ
Serial.print("ลงทะเบียนที่ ID #"); Serial.println(id);
while (finger.getImage() != FINGERPRINT_OK);
if (finger.image2Tz(1) != FINGERPRINT_OK) {
Serial.println("เกิดข้อผิดพลาดในการแปลงภาพลายนิ้วมือ");
return;
}
delay(2000); // รอนิ้วมือถูกยกออก
while (finger.getImage() != FINGERPRINT_NOFINGER);
Serial.println("วางนิ้วมือเดิมลงอีกครั้ง");
while (finger.getImage() != FINGERPRINT_OK);
if (finger.image2Tz(2) != FINGERPRINT_OK) {
Serial.println("เกิดข้อผิดพลาดในการแปลงภาพลายนิ้วมือครั้งที่สอง");
return;
}
if (finger.createModel() != FINGERPRINT_OK) {
Serial.println("ลายนิ้วมือไม่ตรงกัน");
return;
}
if (finger.storeModel(id) != FINGERPRINT_OK) {
Serial.println("ไม่สามารถบันทึกลายนิ้วมือได้");
return;
}
Serial.println("บันทึกลายนิ้วมือเรียบร้อยแล้ว!");
}
void verifyFingerprint() {
Serial.println("รอสแกนลายนิ้วมือ...");
while (finger.getImage() != FINGERPRINT_OK);
if (finger.image2Tz() != FINGERPRINT_OK) {
Serial.println("ไม่สามารถแปลงภาพลายนิ้วมือได้");
return;
}
if (finger.fingerFastSearch() != FINGERPRINT_OK) {
Serial.println("ไม่พบลายนิ้วมือในระบบ");
tone(bz,1000);
return;
}else{
Serial.print("พบลายนิ้วมือที่ ID #"); Serial.println(finger.fingerID);
tone(bz,500);
lcd.setCursor(1,1);
lcd.print("Unlock the door");
myservo.write(180);
delay(10000);
myservo.write(0);
}
}
void deleteFingerprint() {
int id = 1; // สามารถเปลี่ยนเป็น ID ที่ต้องการลบ
Serial.print("กำลังลบลายนิ้วมือที่ ID #"); Serial.println(id);
if (finger.deleteModel(id) == FINGERPRINT_OK) {
Serial.println("ลบลายนิ้วมือเรียบร้อยแล้ว!");
} else {
Serial.println("ไม่สามารถลบลายนิ้วมือได้");
}
}