h>
#include <LiquidCrystal.h>
#include <PN532_HSU.h>
#include <PN532.h>
PN532_HSU pn532hsu(Serial1);
PN532 nfc(pn532hsu);
const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
struct USR
String nama;
String pass;
String nfc;
};
{"SUKIRMAN","7654321","63AFA74B"},
{"JENETHA","1234567","04426C32C52880"}
};
char keymap[numRows][numCols]=
};
// alarm
long tmrBuzz;
int cntBuzz;
bool alarmOn;
int urutBuka;
int urutTutup;
int prosesPintu;
int prosesOld ;
// keypad
String dtKey;
String charPass;
// delay
long timeTunda;
int cntTunda;
int cntSalah;
int cntNfcSalah;
bool cekBobol;
//
String dtNFC;
long tmrOver;
bool newNFC;
int cnt;
long tmrCall;
bool callNow;
int prosesCall;
int cntCall;
void setup() {
Serial.begin(9600);
Serial3.begin(9600);
delay(5000);
Serial3.println("AT+CMGF=1");
lcd.begin(16, 2);
pinMode(pinLock, OUTPUT);
pinMode(pinLimitBuka, INPUT_PULLUP);
pinMode(pinLimitTutup, INPUT_PULLUP);
pinMode(pinMotor[0], OUTPUT);
pinMode(pinMotor[1], OUTPUT);
pinMode(pinBuzzer, OUTPUT);
pinMode(pinBtnBuka,INPUT_PULLUP);
pinMode(pinBtnTutup,INPUT_PULLUP);
digitalWrite(pinLock,HIGH);
// init nfc
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
nfc.setPassiveActivationRetries(0xFF);
nfc.SAMConfig();
void loop() {
if(prosesOld != proses){
prosesOld = proses;
//Serial.print("Urut:");
//Serial.println(proses);
if(cekTombolBuka()) {
proses = 100;
cekBobol = false;
}else if(cekTombolTutup()) {
proses = 200;
switch(proses){
case 0:
proses = 10;
lcd.begin(16, 2);
lcd.clear();
lcd.print("PASS:");
dtKey = "";
charPass = "";
tmrOver = millis();
break;
tmrOver = millis();
proses = 15;
}
KeyPad();
break;
case 15:
proses = 10;
readNFC();
tmrOver = millis();
break;
if(tunda(2)) {
proses = 0;
break;
//if(tunda(1)){
dlyPassSalah--;
lcd.setCursor(0, 0);
lcd.print("Tunggu ");
lcd.print(dlyPassSalah);
Serial.print("Countdown:");
Serial.println(dlyPassSalah);
if(dlyPassSalah == 0){
dlyPassSalah = 30;
proses = 0;
//}
readNFC();
break;
prosesPintu = 100;
proses = 110;
//lcd.clear();
lcd.begin(16, 2);
break;
if(prosesPintu == 0){
proses = 120;
break;
if(prosesPintu == 0){
proses = 130;
lcd.setCursor(0, 1);
break;
case 130:
if(tunda(2)) {
proses = 0;
}
break;
prosesPintu = 200;
proses = 210;
//lcd.clear();
lcd.begin(16, 2);
break;
if(prosesPintu == 0){
proses = 220;
break;
if(prosesPintu == 0){
proses = 230;
lcd.setCursor(0, 1);
break;
case 230:
if(tunda(2)) {
proses = 0;
cekBobol = true;
break;
switch(prosesPintu){
case 0: // stanby
break;
if(BukaPintu()){
prosesPintu = 0;
}
break;
if(TutupPintu()){
prosesPintu = 0;
break;
if(cekBobol){
//Serial.println(digitalRead(pinLimitBuka));
prosesAlarm();
if(callNow){
tmrCall = millis();
switch(prosesCall){
case 0:
CallNum();
prosesCall = 10;
cntCall = 0;
break;
case 10:
cntCall++;
StopCall();
prosesCall = 20;
cntCall = 0;
break;
case 20:
cntCall++;
Serial.println(120 - cntCall );
prosesCall = 0;
callNow = false;
}
break;
void KeyPad(){
if (keypressed != NO_KEY)
switch(keypressed){
case '*':
cnt = 0;
for(int i=0;i<3;i++){
Serial.println(cnt);
if(DataUser[i].pass == dtKey){
Serial.println("PASS OK");
dlyPassSalah = 30;
cnt++;
if(alarmOn){
alarmOn = false;
proses = 0;
cntSalah = 0;
}else{
Serial.print("Nama:");
Serial.println(DataUser[i].nama);
//lcd.clear();
lcd.begin(16, 2);
lcd.print("Nama:");
lcd.print(DataUser[i].nama);
lcd.setCursor(0, 1);
delay(1000);
proses = 100;
cntSalah = 0;
cekBobol = false;
alarmOn = false;
}
break;
Serial.print("cnt:");
Serial.println(cnt);
if(cnt == 0){
Serial.println("PASS SALAH");
proses = 20;
cntSalah++;
lcd.setCursor(0, 1);
lcd.print(cntSalah);
lcd.print("-PASSWORD SALAH");
cntSalah = 0;
proses = 30;
lcd.setCursor(0, 0);
lcd.print(" ");
alarmOn = true;
}else{
proses = 20;
}
}
dtKey = "";
proses = 200;
break;
case '#':
dtKey = "";
charPass = "";
//Serial.println(charPass);
lcd.setCursor(5, 0);
lcd.print(" ");
break;
case 'A':
break;
case 'B':
break;
case 'C':
break;
case 'D':
break;
default:
if(dtKey.length() < 8) {
dtKey+= keypressed;
charPass+="*";
lcd.setCursor(5, 0);
lcd.print(charPass);
lcd.print(" ");
break;
//Serial.print(keypressed);
bool BukaPintu(){
switch(urutBuka){
case 0:
urutBuka = 100;
}else{
urutBuka = 10;
digitalWrite(pinLock,LOW);
delay(100);
break;
digitalWrite(pinMotor[0],LOW);
digitalWrite(pinMotor[1],HIGH);
Serial.println("BUKA PINTU");
urutBuka = 20;
break;
case 20:
if(SudahBuka()){ // cek apakah pintu sudah terbuka full
urutBuka = 100;
break;
case 100:
delay(100);
digitalWrite(pinMotor[0],LOW);
digitalWrite(pinMotor[1],LOW);
digitalWrite(pinLock,HIGH);
urutBuka = 0;
rtrn = true;
break;
return rtrn;
bool TutupPintu(){
case 0:
urutTutup = 100;
}else{
urutTutup = 10;
cekBobol = false;
digitalWrite(pinLock,LOW);
delay(100);
break;
digitalWrite(pinMotor[0],HIGH);
digitalWrite(pinMotor[1],LOW);
Serial.println("TUTUP PINTU");
urutTutup = 20;
break;
case 20:
if(SudahTutup()){ // cek apakah pintu sudah terTutup full
urutTutup = 100;
break;
case 100:
delay(100);
digitalWrite(pinMotor[0],LOW);
digitalWrite(pinMotor[1],LOW);
digitalWrite(pinLock,HIGH);
urutTutup = 0;
rtrn = true;
cekBobol = true;
break;
return rtrn;
bool SudahBuka(){
bool rtrn;
return rtrn;
bool SudahTutup(){
bool rtrn;
return rtrn;
void LockDoor(){
digitalWrite(pinLock,HIGH);
void UnlockDoor(){
digitalWrite(pinLock,LOW);
timeTunda = millis();
cntTunda++;
return false;
}else{
cntTunda = 0;
return true;
void prosesAlarm(){
tmrBuzz = millis();
if(alarmOn){
digitalWrite(pinBuzzer,!digitalRead(pinBuzzer));
}else{
if(digitalRead(pinBuzzer) == 0) digitalWrite(pinBuzzer,HIGH);
callNow = false;
}
}
bool cekTombolBuka(){
bool rtrn ;
return rtrn;
bool cekTombolTutup(){
bool rtrn ;
return rtrn;
void readNFC(){
boolean success;
if (success) {
Serial.println("Found a card!");
dtNFC = "";
newNFC = false;
dtNFC += dtHex;
dtNFC.toUpperCase();
Serial.print("NFC Input:");
Serial.print(dtNFC);
Serial.print("(");
Serial.print(dtNFC.length());
Serial.println(")");
if(dtNFC.length() > 5){
cnt = 0;
//Serial.println("Masuk");
for(int i=0;i<3;i++){
if(DataUser[i].nfc == dtNFC){
dlyPassSalah = 30;
cnt++;
Serial.println("NFC Sesuai");
cekBobol = false;
if(alarmOn){
alarmOn = false;
proses = 0;
cntNfcSalah = 0;
lcd.begin(16, 2);
lcd.print("Nama:");
lcd.print(DataUser[i].nama);
lcd.setCursor(0, 1);
}else{
Serial.print("Nama:");
Serial.println(DataUser[i].nama);
//lcd.clear();
lcd.begin(16, 2);
lcd.print("Nama:");
lcd.print(DataUser[i].nama);
lcd.setCursor(0, 1);
delay(1000);
proses = 100;
cntNfcSalah = 0;
alarmOn = false;
break;
}else{
//cnt =0 ;
Serial.print(cnt);
Serial.print("->");
Serial.println(DataUser[i].nfc);
}
}
Serial.print("cnt:");
Serial.println(cnt);
if(cnt == 0 ){
proses = 20;
cntNfcSalah++;
lcd.setCursor(0, 1);
lcd.print(cntNfcSalah);
cntNfcSalah = 0;
proses = 30;
lcd.setCursor(0, 0);
lcd.print(" ");
alarmOn = true;
}else{
proses = 20;
}
}
dtKey = "";
void CallNum(){
Serial3.println("ATD +6282368283855;");
Serial.println("CALL NUMBER");
void StopCall(){
Serial3.println("ATH;");
Serial.println("STOP CALL");