Security System

Dependencies:   mbed ID12RFID TextLCD keypad

Files at this revision

API Documentation at this revision

Comitter:
mabelliard
Date:
Sun Nov 28 23:21:59 2021 +0000
Parent:
0:b79709bfa1e2
Child:
2:bcdd700feee0
Commit message:
A

Changed in this revision

emic2.h Show annotated file Show diff for this revision Revisions of this file
keypad.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emic2.h	Sun Nov 28 23:21:59 2021 +0000
@@ -0,0 +1,41 @@
+#define speakf printf
+class emic2 : public Stream
+{
+public :
+    emic2(PinName tx, PinName rx): _cmd(tx,rx) {
+        _cmd.baud(9600);
+        _cmd.putc('X'); //stop talking if reset and not a power on
+        _cmd.putc('\r'); // Send a CR in case the system is already up
+        wait(1); //delay for emic power on boot or reset respone
+        while (_cmd.getc() != ':');   // When the Emic 2 has initialized and is ready, it will send a single ':'
+        while (_cmd.readable()) _cmd.getc();//flush out buffer just in case
+    };
+    void ready() {
+        while (_cmd.getc() != ':');
+        while (_cmd.readable()) _cmd.getc();//flush out recieve buffer just in case
+    };
+    int readable() {
+        return _cmd.readable();
+    };
+    int getc() {
+        return _cmd.getc();
+    }
+    void volume(int x) {
+        speakf("V%d\r",x);
+        ready();
+    }
+    void voice(int x) {
+        speakf("N%d\r",x);
+        ready();
+    }
+protected :
+    Serial     _cmd;
+    //used by printf - supply it and printf works!
+    virtual int _putc(int c) {
+        _cmd.putc(c);
+        return 0;
+    };
+    virtual int _getc() {
+        return -1;
+    };
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/keypad.lib	Sun Nov 28 23:21:59 2021 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/yoonghm/code/keypad/#da060f8c03e8
--- a/main.cpp	Sat Nov 20 22:40:16 2021 +0000
+++ b/main.cpp	Sun Nov 28 23:21:59 2021 +0000
@@ -1,30 +1,331 @@
-/*Program Example8.5: TextLCD library example */
-
-
 #include "mbed.h"
 #include "TextLCD.h"
 #include "ID12RFID.h"
+#include "Keypad.h"
+#include "emic2.h"
+
+
+emic2 myTTS(p13, p14); //serial RX,TX pins to emic
 Serial pc(USBTX, USBRX);
-ID12RFID rfid(p14); // uart rx
+ID12RFID rfid(p27); // uart rx
 TextLCD lcd(p15, p16, p21, p22, p23, p24); //rs,e,d0,d1,d2,d3
+DigitalIn PhysicalKey(p5);
+Keypad keypad(p7, p12, p11, p9, p8, p6, p10, NC);
 
-int R;
+// Define your own keypad values
+char Keytable[] = {'1', '2', '3',   // r0
+                   '4', '5', '6',   // r1
+                   '7', '8', '9',   // r2
+                   '*', '0', '#'}; // r3
+                  // c0   c1   c2
+                    
+uint32_t Password[4]={1, 2, 3, 4};
+uint32_t PasswordTry[4];
+uint32_t Index;
+ 
+uint32_t cbAfterInput(uint32_t index) {
+     Index = index;
+     return 0;
+}
 
-int main(){
+//Entry Verification Levels
+DigitalOut CardAuthorized(LED1); //Authorized Card Notification
+DigitalOut PinAuthorized(LED2); //Authorized Pin Notification
+DigitalOut QuestionAuthorized(LED3); //Approved Secuirty Question
+DigitalOut DoorUnlock(LED4); //Approved Entry
 
-    while(1) {
-        lcd.cls();
-        if(rfid.readable()) {
-            R = rfid.read();
-            pc.printf("RFID Tag Number %d\n\r",R); 
-            lcd.printf("RFID Tag Number:%d \n",R);  
-            wait(1);
-            }
-        else {
-            pc.printf("Nothing Reading\n\r");
-            lcd.printf("Nothing Reading");
-            wait(1);
+//Stored integers to manipulate security information
+int Attempts = 0; //Counts how many times Timer ResetEvertyhing has been triggered, and failures
+int CardDATA; //initializes the rfid.read() function early so theres no delay to display the Data
+int Z;
+int UserIdentifier = 0;
+int CorrectNumbersCounter = 0;
+int CorrectNumbersCounter1 = 0;
+int SongCounter = 0;
+int Card[10]={22352713, 22374742};
+int SongEE[4]= {12, 12, 12, 12};
+int CorrectCard = 0;
+char Question[2][64]= {"What is your social security number",
+                          "How many dicks can fit in your ass"};
+uint32_t QuestionAnswers[2][4]={ {5, 5, 5, 5}, 
+                                {6, 6, 6, 6} };
+void ResetLocks(void);
+void ResetLocks(void){
+    CardAuthorized = 0;
+    PinAuthorized = 0;
+    QuestionAuthorized = 0;
+    DoorUnlock = 0;
+    CorrectCard = 0;
+    CorrectNumbersCounter = 0;
+    CorrectNumbersCounter1 = 0;
+    UserIdentifier = 0;  
+    SongCounter = 0; 
+}
+int main(){
+    myTTS.volume(18); //max volume
+    keypad.attach(&cbAfterInput);
+    keypad.start();  // energize the keypad via c0-c3
+    int run_once1 = 0;
+    int run_once2 = 0;
+    int run_once3 = 0;
+    myTTS.voice(2);
+    while(1){
+        while(PhysicalKey == 0) {   //key either not inserted and/or turned
+            if (run_once1 == 0){
+                ResetLocks();
+                lcd.cls();
+                pc.printf("Please Insert Physical Key\n\r");
+                lcd.printf("Please Insert   Physical Key \n");
+                myTTS.speakf("S");//Speak command starts with "S"
+                myTTS.speakf("Please Insert Physical Key");  // Send the desired string to convert to speech
+                myTTS.speakf("\r"); //marks end of speak command
+                myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                run_once1 = 1;         
             }
         }
-    }
-
+        while(PhysicalKey == 1) { //key inserted and turned
+            run_once1 = 0;
+            if (run_once2 == 0){
+                lcd.cls();
+                pc.printf("Please Scan Card\n\r");
+                lcd.printf("Please Scan Card \n");
+                myTTS.speakf("S");//Speak command starts with "S"
+                myTTS.speakf("Please Scan Card");  // Send the desired string to convert to speech
+                myTTS.speakf("\r"); //marks end of speak command
+                myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                run_once2 = 1;         
+            }
+            else if (Attempts > 3) {
+                lcd.cls();
+                pc.printf("Too many Attempts\n\r");
+                lcd.printf("Too many        Attempts\n");
+                myTTS.speakf("S");//Speak command starts with "S"
+                myTTS.speakf("Too many Attempts");  // Send the desired string to convert to speech
+                myTTS.speakf("\r"); //marks end of speak command
+                myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                lcd.cls();
+                pc.printf("LOCKED for 30 Minutes\n\r");
+                lcd.printf("LOCKED for 30   Minutes\n");
+                myTTS.speakf("S");//Speak command starts with "S"
+                myTTS.speakf("Locked for 30 Minutes");  // Send the desired string to convert to speech
+                myTTS.speakf("\r"); //marks end of speak command
+                myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                
+                wait(1800);
+    
+                Attempts = 0;
+            }
+            else if((rfid.readable())&&(Attempts < 4)) {
+                lcd.cls();
+                CardDATA = rfid.read();
+                pc.printf("RFID Tag Number:%d\n\r",CardDATA);
+                lcd.printf("RFID Tag Number:%d\n",CardDATA);
+                wait(1);
+                for(Z = 0; Z<100; Z++){
+                    if(CardDATA==Card[Z]){
+                        UserIdentifier = Z;
+                        CorrectCard = CorrectCard + 1;
+                            //pc.printf("Counter :%d\r\n", CorrectNumbersCounter); 
+                    }
+                }
+                if(CorrectCard == 0){
+                    lcd.cls();
+                    lcd.printf("Fuck You\n"); 
+                    pc.printf("Fuck You\n\r"); 
+                    myTTS.speakf("S");//Speak command starts with "S"
+                    myTTS.speakf("Fuck You");  // Send the desired string to convert to speech
+                    myTTS.speakf("\r"); //marks end of speak command
+                    myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                    wait(2);
+                } 
+                else if(CorrectCard == 1){
+                    CorrectCard = 0;
+                    lcd.cls();
+                    lcd.printf("Card Accepted\n");  
+                    pc.printf("Card Accepted\n\r");  
+                    wait(2);
+                    CardAuthorized = 1;
+                    Attempts = 0;
+                    ////////////////////Beginning of Keypad Section
+                    while ((CardAuthorized == 1)&& (PhysicalKey == 1)) {
+                        lcd.cls();
+                        lcd.printf("Type Pin: ");
+                        pc.printf("Type Pin: ");
+                        myTTS.speakf("S");//Speak command starts with "S"
+                        myTTS.speakf("Type Common Pin");  // Send the desired string to convert to speech
+                        myTTS.speakf("\r"); //marks end of speak command
+                        myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                        for(int A=0; A<4; A++){ 
+                            __wfi();
+                            PasswordTry[A]= Index + 1;
+                            lcd.printf("%c", Keytable[Index]);
+                            pc.printf("%c", Keytable[Index]);   
+                            wait(0.3);
+                        }
+                        for(int B=0; B<4; B++){
+                            if(PasswordTry[B]==Password[B]){
+                                CorrectNumbersCounter = CorrectNumbersCounter + 1;
+                                }
+                        }
+                        for(int Song=0; Song<4; Song++){
+                            if(PasswordTry[Song]==SongEE[Song]){
+                                SongCounter = SongCounter + 1;
+                            }
+                        }
+                        if(SongCounter == 4){
+                            lcd.cls();
+                            lcd.printf("Easter Egg ON\n");
+                            pc.printf("\n\rEaster Egg ON\n\r");  
+                            myTTS.speakf("D1\r");//Sing Song Demo
+                            myTTS.ready(); //member function wait
+                            SongCounter = 0;
+                            }
+                        else if(CorrectNumbersCounter == 4){
+                            SongCounter = 0;
+                            lcd.cls();
+                            lcd.printf("Pin Accepted\n");
+                            pc.printf("\n\rPin Accepted\n\r");  
+                            wait(2);
+                            PinAuthorized = 1;
+                            Attempts = 0;
+                        }
+                        else if (CorrectNumbersCounter < 4){
+                            SongCounter= 0;
+                            CorrectNumbersCounter = 0;
+                            lcd.cls();
+                            lcd.printf("FAIL"); 
+                            pc.printf("FAIL");
+                            myTTS.speakf("S");//Speak command starts with "S"
+                            myTTS.speakf("Incorrect Entry");  // Send the desired string to convert to speech
+                            myTTS.speakf("\r"); //marks end of speak command
+                            myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                            Attempts = Attempts + 1;
+                            if(Attempts == 4){
+                                ResetLocks();
+                            } 
+                        }
+                        while ((PinAuthorized == 1)&&(PhysicalKey == 1)) {
+                        //security question
+                            lcd.cls();
+                            lcd.printf("Security\n"); 
+                            lcd.printf("Question\n"); 
+                            pc.printf("Security Question\n\r");                             
+                            myTTS.speakf("S");//Speak command starts with "S"
+                            myTTS.speakf("Security Question");  // Send the desired string to convert to speech
+                            myTTS.speakf("\r"); //marks end of speak command
+                            myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                            lcd.cls();
+                            //lcd.printf("%s\n", Question[UserIdentifier]); 
+                            pc.printf("%s\n\r", Question[UserIdentifier]);                            
+                            myTTS.speakf("S");//Speak command starts with "S"
+                            myTTS.speakf("%s\r", Question[UserIdentifier]) ; //desired string to convert to speech
+                            myTTS.speakf("\r"); //marks end of speak command
+                            myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                            lcd.cls();
+                            lcd.printf("Type Answer: \n"); 
+                            pc.printf("Type Answer: \n\r"); 
+                            for(int C=0; C<4; C++){ 
+                                __wfi();
+                                PasswordTry[C]= Index + 1;
+                                pc.printf("%d", PasswordTry[C]);
+                                lcd.printf("%d", PasswordTry[C]);  
+                                wait(0.5);
+                            }
+                            for(int D=0; D<4; D++){
+                                if(QuestionAnswers[UserIdentifier][D]==PasswordTry[D]){
+                                    CorrectNumbersCounter1 = CorrectNumbersCounter1 + 1;
+                                }
+                            }
+                            if(CorrectNumbersCounter1 == 4){
+                                lcd.cls();
+                                lcd.printf("Answered\n");
+                                lcd.printf("Accepted\n");
+                                pc.printf("\n\rAnswer Accepted\n\r"); 
+                                myTTS.speakf("S");//Speak command starts with "S"
+                                myTTS.speakf("Answer Accepted");  // Send the desired string to convert to speech
+                                myTTS.speakf("\r"); //marks end of speak command
+                                myTTS.ready(); //ready waits for speech to finish from last command with a ":" respo
+                                QuestionAuthorized = 1;
+                                Attempts = 0;
+                            }
+                            else if(CorrectNumbersCounter1 <4) {
+                            CorrectNumbersCounter1 = 0;
+                                lcd.cls();
+                                lcd.printf("FAIL"); 
+                                pc.printf("FAIL");
+                                myTTS.speakf("S");//Speak command starts with "S"
+                                myTTS.speakf("Incorrect Entry");  // Send the desired string to convert to speech
+                                myTTS.speakf("\r"); //marks end of speak command
+                                myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                                Attempts = Attempts + 1;
+                                if(Attempts == 4){
+                                    ResetLocks();
+                                } 
+                            }                            
+            
+                            while((QuestionAuthorized == 1)){
+                                if(PhysicalKey == 1){
+                                    if (run_once3 == 0){
+                                        lcd.cls();
+                                        pc.printf("Please Remove Key\n\r");
+                                        lcd.printf("Please Remove   Key\n");
+                                        myTTS.speakf("S");//Speak command starts with "S"
+                                        myTTS.speakf("Please Remove Key");  // Send the desired string to convert to speech
+                                        myTTS.speakf("\r"); //marks end of speak command
+                                        myTTS.ready(); //ready waits for speech to finish from last command with a ":" respo
+                                        run_once3 = 1;
+                                    }
+                                }
+                                else if(PhysicalKey == 1){
+                                    run_once3 = 0;
+                                    lcd.cls();
+                                    pc.printf("Key Removed\n\r");
+                                    lcd.printf("Key Removed\n");
+                                    wait(2);
+                                    DoorUnlock = 1;
+                                    myTTS.speakf("S");//Speak command starts with "S"
+                                    myTTS.speakf("Seconds until closed");  // Send the desired string to convert to speech
+                                    myTTS.speakf("\r"); //marks end of speak command
+                                    myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                                    for(int Y=5; Y>0; --Y){
+                                        lcd.cls();
+                                        pc.printf("Door Open For %d Seconds\n\r",Y);
+                                        lcd.printf("Door Open For:\n");
+                                        lcd.printf("%d Seconds\n",Y);
+                                        myTTS.speakf("S");//Speak command starts with "S"
+                                        myTTS.speakf("%d",Y);  // Send the desired string to convert to speech
+                                        myTTS.speakf("\r"); //marks end of speak command
+                                        myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                                    }
+                                    ResetLocks();
+                                    lcd.cls();
+                                    pc.printf("Door Locked\n\r");
+                                    lcd.printf("Door Locked\n");
+                                    myTTS.speakf("S");//Speak command starts with "S"
+                                    myTTS.speakf("Door Locked");  // Send the desired string to convert to speech
+                                    myTTS.speakf("\r"); //marks end of speak command
+                                    myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                                    wait(1);
+                                    Attempts = 0;  
+                                }
+                            }
+                        }
+                    }
+                } 
+                } 
+                else if (run_once2 == 0){
+                    lcd.cls();
+                    pc.printf("Please Scan Card\n\r");
+                    lcd.printf("Please Scan Card\n");
+                    myTTS.speakf("S");//Speak command starts with "S"
+                    myTTS.speakf("Please Scan Card");  // Send the desired string to convert to speech
+                    myTTS.speakf("\r"); //marks end of speak command
+                    myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+                    run_once2 = 1;         
+                }               
+        if(PhysicalKey == 0){
+            run_once2 = 0;
+        }
+        }//Second While Loop Braket
+    }// While(1)
+}//Main Braket
\ No newline at end of file