Security System
Dependencies: mbed ID12RFID TextLCD keypad
Revision 1:43e6a97f7d4d, committed 2021-11-28
- Comitter:
- mabelliard
- Date:
- Sun Nov 28 23:21:59 2021 +0000
- Parent:
- 0:b79709bfa1e2
- Child:
- 2:bcdd700feee0
- Commit message:
- A
Changed in this revision
--- /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