Advertisement
Nurmala

RFID Door Lock

Apr 19th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.50 KB | None | 0 0
  1. #include <SoftwareSerial.h>
  2. SoftwareSerial SIM900A(0,1);
  3. #pragma GCC diagnostic ignored "-Wwrite-strings"
  4. #include "SIM900.h"
  5. #include "sms.h"
  6. #include <RFID.h>
  7. #include <SPI.h>
  8. #include <Wire.h>
  9. #include <LiquidCrystal_I2C.h>
  10. LiquidCrystal_I2C lcd(0x3F, 16, 2);
  11.  
  12. #define SS_PIN 10
  13. #define RST_PIN 9
  14.  
  15. RFID rfid(SS_PIN,RST_PIN);
  16. SMSGSM sms;
  17. boolean started=false;
  18. char smsbuffer[160];
  19. char n[20];
  20.  
  21. const int button = 4;
  22. const int buzzer = 8;
  23. const int doorLock = 7;
  24.  
  25. int serNum[5];
  26. int cards [][5]=
  27. {
  28.   {136,4,100,93,181} //nomor ID Ektp
  29.  
  30. };
  31. int buttonState = 0;
  32. boolean access = false;
  33. int alarm = 0;
  34. int8_t alarmStat = 0;
  35. int8_t maxError = 3;
  36.  
  37. void setup(){
  38.  
  39.   SPI.begin();
  40.   lcd.clear();
  41.   rfid.init();
  42.   pinMode(doorLock, OUTPUT);
  43.   pinMode(button, INPUT);
  44.   digitalWrite(doorLock, LOW);
  45.   lcd.begin(16,2);
  46.   lcd.print("LOADING...");
  47.  
  48.   if (gsm.begin(9600))
  49.   {
  50.     started=true;
  51.     lcd.clear();
  52.     lcd.setCursor(0,0);
  53.     lcd.print("   NURMALA   ");
  54.     lcd.setCursor(0,1);
  55.     lcd.print("TEKNIK KOMPUTER");
  56.     delay(3000);
  57.     sms.SendSMS("085832042144","Sms telah siap");
  58.   }
  59.   else{lcd.clear();
  60.   lcd.print("GSM ERROR");
  61.   }
  62. }
  63.  
  64. void loop()
  65. {
  66.   if(alarm>=maxError){
  67.     alarmStat = 1;
  68.     }
  69.     if(alarmStat==0){
  70.       lcd.setCursor(0,0);
  71.       lcd.print(" SELAMAT DATANG ");
  72.       lcd.setCursor(0,1);
  73.       lcd.print("TEMPELKAN E-KTP");
  74.  
  75.       if(rfid.isCard()){
  76.         if(rfid.readCardSerial()){
  77.           for(int x = 0; x < sizeof(cards);x++){
  78.             for(int i = 0; i <sizeof(rfid.serNum);i++){
  79.               if(rfid.serNum[i]!=cards[x][i]){
  80.                 access = false;
  81.                 break;
  82.                 } else {
  83.                   access = true;
  84.                 }      
  85.             }
  86.           if(access)break;
  87.           }
  88.         }
  89.  
  90.       if(access){
  91.         {
  92.           digitalWrite(doorLock, HIGH);
  93.  
  94.  
  95.           alarmStat = 0;
  96.           alarm = 0;
  97.  
  98.         }
  99.     lcd.setCursor(0,0);
  100.     lcd.print(" Silahkan Masuk ");
  101.     lcd.setCursor(0,1);
  102.     lcd.print("Akan Terkunci ");
  103.     for(int i=10; i>0; i--){
  104.       lcd.setCursor(14,1);
  105.       lcd.print(i);
  106.       lcd.print(F(" "));
  107.       delay(1000);
  108.     }
  109.       digitalWrite(doorLock,LOW);
  110.      
  111.       } else {
  112.         alarm = alarm+1;
  113.         lcd.setCursor(0,0);
  114.         lcd.print("  Akses Ditolak  ");
  115.         lcd.setCursor(0,1);
  116.         lcd.print("-----------------");
  117.  
  118.         tone(buzzer,2000);
  119.         delay(200);
  120.         noTone(buzzer);
  121.         delay(200);
  122.         tone(buzzer,2000);
  123.         delay(200);
  124.         noTone(buzzer);
  125.         delay(1000);
  126.         noTone(buzzer);
  127.  
  128.         lcd.setCursor(0,0);
  129.         lcd.print("    E-KTP Anda   ");
  130.         lcd.setCursor(0,1);
  131.         lcd.print("Tidak Terdaftar");
  132.         delay(2000);
  133.         lcd.clear();
  134.       }
  135.       }
  136.  
  137.       rfid.halt();
  138.       }
  139.       else {
  140.         lcd.setCursor(0,0);
  141.         lcd.print("  PERINGATAN!!!   ");
  142.         lcd.setCursor(0,1);
  143.         lcd.print("SISTEM TERKNCI ");
  144.         tone(buzzer, 1500);
  145. /*
  146.         delay(3000);
  147.         noTone(buzzer);
  148.         delay(1000);
  149.  
  150.         tone(buzzer,1500);
  151.         delay(4000);
  152.         noTone(buzzer);
  153.         delay(2000);
  154.  
  155.   tone(buzzer, 1500);
  156.   delay(5000);
  157.   noTone(buzzer);
  158.   delay(3000);
  159.  
  160.   tone(buzzer, 1500);
  161.   delay(6000);
  162.   noTone(buzzer);
  163.   delay(4000);
  164.  
  165.   tone(buzzer, 15000);
  166.   delay(7000);
  167.   noTone(buzzer);
  168.   */  
  169.   sms.SendSMS("08582042144","Peringatan!!! Ada yang mencoba membuka pintu.");    
  170. //delay(500);
  171. tone(buzzer, 1500);
  172. delay(8000);
  173. noTone(buzzer);
  174.  
  175. alarmStat = 0;
  176. alarm = 0;
  177.  
  178.       }
  179. buttonState = digitalRead(button);
  180. if(buttonState==HIGH){
  181.   digitalWrite(doorLock,HIGH);
  182.   lcd.setCursor(0,0);
  183.   lcd.print(" Silahkan Masuk");
  184.   lcd.setCursor(0,1);
  185.   lcd.print(" Kunci Terbuka ");
  186.   delay(7000);
  187.   digitalWrite(doorLock,LOW);
  188.   lcd.clear();
  189.  
  190.   alarmStat=0;
  191.   alarm=0;
  192.  
  193. }
  194. int pos=0;
  195. if(started){
  196.   pos=sms.IsSMSPresent(SMS_ALL);
  197.   if(pos){
  198.    sms.GetSMS(pos,n,smsbuffer,100);
  199.    
  200. if(!strcmp(smsbuffer,"buka")){
  201.   digitalWrite(doorLock,HIGH);
  202.   lcd.setCursor(0,0);
  203.   lcd.print(" Silahkan Masuk");
  204.   lcd.setCursor(0,1);
  205.   lcd.print(" Kunci Terbuka");
  206.  
  207.   //sms.SendSMS("085832042144","Kunci telah terbuka");
  208.  
  209.   delay(10000);
  210.   digitalWrite(doorLock,LOW);
  211. }
  212.   delsms();
  213.   alarmStat=0;
  214.   alarm=0;
  215. }
  216.   }
  217. }
  218. void delsms()
  219. {
  220.   for (int i=0; i<10; i++)
  221.   {
  222.     int pos=sms.IsSMSPresent(SMS_ALL);
  223.     if(pos!=0)
  224.     {
  225.       if(sms.DeleteSMS(pos)==1){}else{}
  226. }
  227. }
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement