#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <TinyGPS.h>
TinyGPS gps;
SoftwareSerial sgps(4, 5);
SoftwareSerial sgsm(2, 3);
float gpslat, gpslon;
LiquidCrystal_I2C lcd(0x27, 16, 2);
Password password = Password("12345"); // password
int passL = 5; // length of the password
int ledRed = A0;
int ledGreen = A1;
int buzzer = A2;
int passNo; // number of clicksx
const byte ROWS = 4; // rows
const byte COLS = 3;// cols
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {13, 12, 11, 10};
byte colPins[COLS] = {9, 8, 7};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup()
{
Serial.begin(9600);
sgsm.begin(9600);
sgps.begin(9600);
keypad.addEventListener(keypadEvent);
pinMode(ledRed, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(ledRed, HIGH);
digitalWrite(ledGreen, LOW);
lcd.init();
lcd.backlight();
lcd.print("PLEASE ENTER PIN");
}
void loop()
{
keypad.getKey();
}
void keypadEvent(KeypadEvent eKey)
{
switch (keypad.getState())
{
case PRESSED:
int i;
for ( i = 1; i <= 1; i++ )
{
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
delay(50);
}
Serial.print("Pressed: ");
Serial.println(eKey);
switch (eKey)
{
/*
case ‘#’:
break;
case ‘*’:
break;
*/
default:
passNo = passNo + 1;
password.append(eKey);
}
//Serial.println(passNo);
if (passNo == 1)
{
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(" < PIN >");
lcd.setCursor(0, 1);
lcd.print("");
}
if (passNo == 2)
{
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(" < PIN >");
lcd.setCursor(0, 1);
lcd.print("**");
}
if (passNo == 3)
{
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(" < PIN >");
lcd.setCursor(0, 1);
lcd.print("_");
}
if (passNo == 4)
{
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(" < PIN >");
lcd.setCursor(0, 1);
lcd.print("**");
}
if (passNo == 5)
{
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(" < PIN >");
lcd.setCursor(0, 1);
lcd.print("*****");
}
if (passNo == passL)
{
delay(250);
checkPassword();
passNo = 0;
}
}
}
void checkPassword()
{
if (password.evaluate())
{
int i;
for ( i = 1; i <= 2; i++ )
{
digitalWrite(buzzer, HIGH);
delay(70);
digitalWrite(buzzer, LOW);
delay(70);
}
passNo = 0;
Serial.println("Success");
digitalWrite(ledRed, LOW);
digitalWrite(ledGreen, HIGH);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(" << SUCCESS >>");
}
else
{
int i;
for ( i = 1; i <= 1; i++ )
{
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(200);
}
passNo = 0;
password.reset();
Serial.println("wrong");
digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, HIGH);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("<< WRONG >>");
checklocation();
delay(5000);
lcd.clear();
}
}
void checklocation(){
while (sgps.available())
{
int c = sgps.read();
if (gps.encode(c))
{
sendlocation();
}
}
}
void sendlocation()
{
gps.f_get_position(&gpslat, &gpslon);
sgsm.print("AT+CMGF=1\r");
delay(200);
sgsm.print("AT+CMGS="+60167746652"\r");
delay(200);
sgsm.println("Vehicle Tracking Alert");
sgsm.println("Your Vehicle Current Location is:");
sgsm.print("Google Maps");
Serial.print("Google Maps");
sgsm.print(gpslat, 6);
Serial.print(gpslat, 6);
sgsm.print(",");
Serial.print(",");
sgsm.println(gpslon, 6);
Serial.println(gpslon, 6);
sgsm.print("Please take some action soon...");
sgsm.write(26);
}