#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>
#include <Adafruit_Fingerprint.h>
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
// Emergency contact phone number
String phoneNumber = "1234567890";
// Variables to store the time interval between the start and end of touching
long startTouchTime = 0;
long endTouchTime = 0;
void setup() {
Serial.begin(9600);
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1);
}
// Setup for sending SMS
Serial1.begin(9600);
delay(5000);
Serial1.println("AT+CMGF=1"); // Set the GSM Module in Text Mode
delay(1000);
Serial1.println("AT+CNMI=2,2,0,0,0"); // Set the GSM module to send SMS data to the serial out upon receipt
delay(1000);
}
void loop() {
if (finger.getTemplateCount() > 0) {
// Turn on the alarm
Serial.println("Alarm On");
// Get the current location and send it to the emergency contact
getLocation();
sendSMS();
}
}
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println("No finger detected");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK success!
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK converted!
Serial.print("Scanning");
delay(50);
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
startTouchTime = millis(); // Store the start time
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Sensor could not find a match");
return p;
}
// Check if the sensor was touched for more than five seconds
endTouchTime = millis();
if (endTouchTime - startTouchTime > 5000) {
// Ring the alarm
Serial.println("Alarm");