Skip to content
Snippets Groups Projects
Commit 12f34340 authored by ratnadiraw's avatar ratnadiraw
Browse files

done

parents
Branches
No related merge requests found
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Password.h>
#include <Keypad.h>
#include <SPI.h>
#include <RFID.h>
#include <Ultrasonic.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN,RST_PIN);
int serNum[5]; //Variable buffer Scan Card
int cards[][5] = { //ID Kartu yang diperbolehkan masuk
{166,153,250,28,217}
};
Ultrasonic ultrasonic(2, 7);
bool access = false;
LiquidCrystal_I2C lcd(0x3F, 16, 2);
Password password = Password("1997");
const byte ROWS = 4; // Four rows
const byte COLS = 3; // columns
// Define the Keymap
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = { 8,5,4,3 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { A3,A2,A1 };// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int alarm = 0;
uint8_t alarmStat = 0;
uint8_t maxError = 5;
unsigned long previousMillis = 0;
const long interval = 1000;
uint8_t pwMode=0;
uint8_t pwPos=0;
int showGuest=0;
void setup(){
Serial.begin(9600);
lcd.begin();
SPI.begin();
rfid.init();
pinMode(6, OUTPUT);
keypad.addEventListener(keypadEvent); //add an event listener for this keypad
digitalWrite(6, LOW);
lcd.setCursor (0,0);
lcd.print(F(" RFID System "));
lcd.setCursor (0,1);
lcd.print(F(" Control Access "));
delay (2000);
lcd.clear();
}
void loop(){
int cm = ultrasonic.distanceRead();
Serial.print(cm);
Serial.println(" cm");
if (cm>0 && cm<50 && showGuest==0) {
lcd.setCursor (0,1);
lcd.print(F(" Welcome GUEST!! "));
delay(5000);
showGuest=1;
}
keypad.getKey(); //Reading Keypad
if (alarm >= maxError){
alarmStat = 1; }
if (alarmStat == 0 && pwMode == 0){
lcd.setCursor (0,0);
lcd.print(F(" -System Ready- "));
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
//previousMillis = currentMillis;
lcd.setCursor (0,1);
lcd.print(F(" Scan Your Card "));
}
if (currentMillis - previousMillis >= (2*interval)) {
previousMillis = currentMillis;
lcd.setCursor (0,1);
lcd.print(F(" Enter Password "));
}
if(rfid.isCard()){
if(rfid.readCardSerial()){
Serial.print(rfid.serNum[0]);
Serial.print(" ");
Serial.print(rfid.serNum[1]);
Serial.print(" ");
Serial.print(rfid.serNum[2]);
Serial.print(" ");
Serial.print(rfid.serNum[3]);
Serial.print(" ");
Serial.print(rfid.serNum[4]);
Serial.println("");
for(int x = 0; x < sizeof(cards); x++){
for(int i = 0; i < sizeof(rfid.serNum); i++ ){
if(rfid.serNum[i] != cards[x][i]) {
access = false;
break;
} else {
access = true;
}
}
if(access) break;
}
}
if(access){
Serial.println("Welcome!");
lcd.setCursor (0,0);
lcd.print(F(" Akses diterima "));
lcd.setCursor (0,1);
lcd.print("ID:");
lcd.print(rfid.serNum[0]); lcd.print(rfid.serNum[1]);
lcd.print(rfid.serNum[2]); lcd.print(rfid.serNum[3]);
lcd.print(rfid.serNum[4]);
ACCEPT ();
}
else {
alarm = alarm+1;
Serial.println("Not allowed!");
lcd.setCursor (0,0);
lcd.print(F(" Akses ditolak "));
lcd.setCursor (0,1);
lcd.print("ID:");
lcd.print(rfid.serNum[0]); lcd.print(rfid.serNum[1]);
lcd.print(rfid.serNum[2]); lcd.print(rfid.serNum[3]);
lcd.print(rfid.serNum[4]);
RIJECT ();
}
}
rfid.halt();
}
if (alarmStat == 1) {
lcd.setCursor (0,0);
lcd.print(F("-System LOCKED- "));
lcd.setCursor (0,1);
lcd.print(F(" Please Wait "));
for(int i=60; i>0; i--){
lcd.setCursor (13,1); lcd.print(i);
lcd.print(F(" "));delay (1000);}
alarmStat = 0;
alarm = 0;
}
}
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
Serial.print("Pressed: ");
Serial.println(eKey);
pwMode =1;
pwPos=pwPos+1;
if(pwPos==1){lcd.clear();}
lcd.setCursor (0,0);
lcd.print(F("Password Entered"));
if(pwPos<5){lcd.setCursor (5+pwPos,1);
lcd.print(F("*"));}
switch (eKey){
case '*': checkPassword(); break;
//case '#': password.reset(); break;
default: password.append(eKey);
}
}
}
void checkPassword(){
if (password.evaluate()){
Serial.println("Password OK");
lcd.setCursor (0,1);
lcd.print(F(" -Accepted- "));
ACCEPT ();
password.reset();
pwPos=0;
}else{
Serial.println("Password SALAH");
lcd.setCursor (0,1);
lcd.print(F(" -Rejected- "));
alarm = alarm+1;
RIJECT ();
password.reset();
pwPos=0;
}
}
void ACCEPT () {
lcd.setCursor (0,0);
lcd.print(F(" Silahkan Masuk "));
lcd.setCursor (0,1);
lcd.print(F("AutoLock after "));
int brightness = 50;
for(int i=5; i>0; i--){
lcd.setCursor (15,1); lcd.print(i);analogWrite(6, brightness);
brightness = brightness+50;
delay (1000);
}
pwMode =0;
lcd.clear();
showGuest=0;
digitalWrite(6, LOW);
}
void RIJECT () {
pwMode =0;
showGuest=0;
lcd.clear();
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment