#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
// D2 ve D3 sabit kalsın: Sensör TX -> D2, Sensör RX -> D3
SoftwareSerial fingerSerial(2, 3); // D2=RX (UNO), D3=TX (UNO)
Adafruit_Fingerprint finger(&fingerSerial);
void printMenu() {
Serial.println("\n=== AS608 Menu ===");
Serial.println("[e] Kayit (enroll)");
Serial.println("[m] Esleme (match)");
Serial.println("[d] ID sil");
Serial.println("[l] Kac kayit var?");
Serial.print("> ");
}
uint8_t readNumber() {
while (!Serial.available());
int num = Serial.parseInt();
while (Serial.available()) Serial.read();
return (uint8_t)num;
}
uint8_t captureAndConvert(uint8_t slot) {
int p = -1;
while (p != FINGERPRINT_OK) {
p = finger.getImage();
if (p == FINGERPRINT_NOFINGER) { delay(50); continue; }
if (p != FINGERPRINT_OK) { Serial.println("Goruntu alinamadi"); return p;
}
}
p = finger.image2Tz(slot);
if (p != FINGERPRINT_OK) Serial.println("Goruntu donusumu basarisiz");
return p;
}
void doEnroll() {
Serial.print("Kaydedilecek ID (1-127): ");
uint8_t id = readNumber();
if (!id) { Serial.println("Gecersiz ID"); return; }
Serial.println("Ayni parmagini 2 kez okutacaksin...");
Serial.println("1) Parmagini koy");
if (captureAndConvert(1) != FINGERPRINT_OK) return;
Serial.println("Parmagini kaldir...");
while (finger.getImage() != FINGERPRINT_NOFINGER) delay(50);
Serial.println("2) Ayni parmagini tekrar koy");
if (captureAndConvert(2) != FINGERPRINT_OK) return;
if (finger.createModel() != FINGERPRINT_OK) { Serial.println("Eslesme
olmadi, tekrar dene."); return; }
if (finger.storeModel(id) == FINGERPRINT_OK) Serial.println(">> Kayit
tamam!");
else Serial.println("Kayit hafizaya yazilamadi.");
}
void doMatch() {
Serial.println("Parmagini koy (tanimaya calisiyorum)...");
int p = -1;
while (p != FINGERPRINT_OK) {
p = finger.getImage();
if (p == FINGERPRINT_NOFINGER) { delay(50); continue; }
if (p != FINGERPRINT_OK) { Serial.println("Goruntu alinamadi"); return; }
}
if (finger.image2Tz() != FINGERPRINT_OK) { Serial.println("Donusum hatasi");
return; }
if (finger.fingerFastSearch() != FINGERPRINT_OK) { Serial.println("Eslesme
yok."); return; }
Serial.print(">> ID: ");
Serial.print(finger.fingerID);
Serial.print(" Guven: ");
Serial.println(finger.confidence);
}
void doDelete() {
Serial.print("Silinecek ID: ");
uint8_t id = readNumber();
if (finger.deleteModel(id) == FINGERPRINT_OK) Serial.println(">> Silindi.");
else Serial.println("Silinemedi.");
}
void doCount() {
if (finger.getTemplateCount() == FINGERPRINT_OK) {
Serial.print("Kayitli sayi: ");
Serial.println(finger.templateCount);
} else {
Serial.println("Okunamadi.");
}
}
// --- OTO-BAUD TARAYICI --bool initWithAutoBaud() {
uint32_t speeds[] = {57600, 115200, 19200, 9600};
for (uint8_t i=0; i<sizeof(speeds)/sizeof(speeds[0]); i++) {
uint32_t sp = speeds[i];
Serial.print("Deniyor baud: "); Serial.println(sp);
finger.begin(sp);
delay(10);
if (finger.verifyPassword()) {
Serial.print(">> Sensor bulundu! Baud = "); Serial.println(sp);
return true;
}
}
return false;
}
void setup() {
Serial.begin(9600);
delay(500);
Serial.println("AS608 basliyor...");
if (!initWithAutoBaud()) {
Serial.println("Sensor bulunamadi! TX/RX ve beslemeyi, ayrica D2/D3
baglantilarini kontrol et.");
while (1) { delay(10); }
}
printMenu();
}
void loop() {
if (Serial.available()) {
char c = Serial.read();
if
(c == 'e') doEnroll();
else if (c == 'm') doMatch();
else if (c == 'd') doDelete();
else if (c == 'l') doCount();
printMenu();
}
}