Progetto cassaforte

Dependencies:   mbed KeypadLib

Committer:
AndreaS97
Date:
Tue Dec 04 10:09:41 2018 +0000
Revision:
0:bb97e8580dd0
Cassaforte Yo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AndreaS97 0:bb97e8580dd0 1 #include "mbed.h"
AndreaS97 0:bb97e8580dd0 2 #include "keypad.h"
AndreaS97 0:bb97e8580dd0 3
AndreaS97 0:bb97e8580dd0 4 int dim=4;
AndreaS97 0:bb97e8580dd0 5 Serial pc(USBTX, USBRX);
AndreaS97 0:bb97e8580dd0 6 Keypad keypad(D6,D5,D4,D3,D10,D9,D8,D7); //porte del tastierino
AndreaS97 0:bb97e8580dd0 7 char pass[4]={'1','2','3','4'}; //password di default (è possibile cambiarla dal menu)
AndreaS97 0:bb97e8580dd0 8 DigitalOut buz(D2); //porta buz
AndreaS97 0:bb97e8580dd0 9 DigitalIn mag(D11); //porta del magnete
AndreaS97 0:bb97e8580dd0 10 bool alonoff=true; //variabile booleana per abilitare o disabilitare l'allarme in caso di apertura e chiusura (?)
AndreaS97 0:bb97e8580dd0 11 void inserimento(char[],int); //funzione per inserire parametri dal tastierino
AndreaS97 0:bb97e8580dd0 12 void menu(); //funzione per andare al menu (dove è possibile cambiare pas, aprire ecc...
AndreaS97 0:bb97e8580dd0 13 void alarm(); //funzione allarme (attiva il buz e fa inserire il codice per la disattivazione)
AndreaS97 0:bb97e8580dd0 14 int i=0;
AndreaS97 0:bb97e8580dd0 15 int main(){
AndreaS97 0:bb97e8580dd0 16 char vet[dim];
AndreaS97 0:bb97e8580dd0 17 int cont;
AndreaS97 0:bb97e8580dd0 18 int tent=0; //MANCA LA PARTE RELATIVA AL MAGNETICO (Magnetico aperto(mag=0) => suona se l'allarme è inserito)
AndreaS97 0:bb97e8580dd0 19 do{
AndreaS97 0:bb97e8580dd0 20 cont=0;
AndreaS97 0:bb97e8580dd0 21 pc.printf("Insert password: "); //inserimento della password
AndreaS97 0:bb97e8580dd0 22 inserimento(vet,dim);
AndreaS97 0:bb97e8580dd0 23
AndreaS97 0:bb97e8580dd0 24 for(int p=0;p<dim;p++){ //confronto con la password
AndreaS97 0:bb97e8580dd0 25 if (vet[p]==pass[p]){
AndreaS97 0:bb97e8580dd0 26 cont++;
AndreaS97 0:bb97e8580dd0 27 }
AndreaS97 0:bb97e8580dd0 28 }
AndreaS97 0:bb97e8580dd0 29
AndreaS97 0:bb97e8580dd0 30 if (cont==dim){ //se il confronto è andato bene vai al menu e disattiva l'allarme
AndreaS97 0:bb97e8580dd0 31 pc.printf("The password is correct \n");
AndreaS97 0:bb97e8580dd0 32 alonoff=false;
AndreaS97 0:bb97e8580dd0 33 menu();
AndreaS97 0:bb97e8580dd0 34 }
AndreaS97 0:bb97e8580dd0 35 if(cont!=dim){ //se il confronto non è andato incrementa i tentativi e si riparte da capo
AndreaS97 0:bb97e8580dd0 36 pc.printf("Password not valid");
AndreaS97 0:bb97e8580dd0 37 tent++;
AndreaS97 0:bb97e8580dd0 38 if (tent==3){ //se i tentativi sono più di tre chiama la funzione allarme
AndreaS97 0:bb97e8580dd0 39 alarm();
AndreaS97 0:bb97e8580dd0 40 }
AndreaS97 0:bb97e8580dd0 41 }
AndreaS97 0:bb97e8580dd0 42 }while(1); //il while(1) permette di ripetere l'operazione di continuo, si esce solo
AndreaS97 0:bb97e8580dd0 43 } //saltanto alla funzione allarme o menu, dalle due funzioni poi si potrà
AndreaS97 0:bb97e8580dd0 44 //ritornare al main richiamandolo da capo.
AndreaS97 0:bb97e8580dd0 45 void inserimento(char a[],int n){ //funzione di acquisizione dal tastierino
AndreaS97 0:bb97e8580dd0 46 i=0;
AndreaS97 0:bb97e8580dd0 47 do{
AndreaS97 0:bb97e8580dd0 48 keypad.enablePullUp();
AndreaS97 0:bb97e8580dd0 49 char val = keypad.getKey();
AndreaS97 0:bb97e8580dd0 50 if(val != KEY_RELEASED){ //se qualche tasto è premuto stampalo e mettilo nell'array
AndreaS97 0:bb97e8580dd0 51 pc.printf("%c ",val);
AndreaS97 0:bb97e8580dd0 52 a[i]=val;
AndreaS97 0:bb97e8580dd0 53 i++;
AndreaS97 0:bb97e8580dd0 54 wait(0.4);
AndreaS97 0:bb97e8580dd0 55 }
AndreaS97 0:bb97e8580dd0 56
AndreaS97 0:bb97e8580dd0 57 }while(i<n); //ripeti fino alla dimensione dell'array richiesto
AndreaS97 0:bb97e8580dd0 58 }
AndreaS97 0:bb97e8580dd0 59
AndreaS97 0:bb97e8580dd0 60 void menu(){ //funzione menu (si accede quando la password è corretta)
AndreaS97 0:bb97e8580dd0 61
AndreaS97 0:bb97e8580dd0 62 pc.printf("A to open, B to Block, C to Change password ");
AndreaS97 0:bb97e8580dd0 63 char val;
AndreaS97 0:bb97e8580dd0 64 do{
AndreaS97 0:bb97e8580dd0 65 inserimento(&val,1); //inserimento dell'opzione scelta dal tastierino (in questo caso la dimensione è 1 e poichè la funzione
AndreaS97 0:bb97e8580dd0 66 if(val!='A' && val!='B' && val!='C'){ //accetta solo variabile indirizzo bisogna mandare l'indirizzo di val)
AndreaS97 0:bb97e8580dd0 67 pc.printf("Not Valid"); //se il valore è diverso da A, B o C ripeti l'inserimento.
AndreaS97 0:bb97e8580dd0 68 }
AndreaS97 0:bb97e8580dd0 69 }while(val!='A' && val!='B' && val!='C');
AndreaS97 0:bb97e8580dd0 70
AndreaS97 0:bb97e8580dd0 71 if(val=='A'){ //MANCA APERTURA CON SERVO
AndreaS97 0:bb97e8580dd0 72 pc.printf("Opening... \n"); //apertura col servo e disattivazione dell'allarme (altrimenti se il magnetico si apre
AndreaS97 0:bb97e8580dd0 73 menu(); //si va in allarme)
AndreaS97 0:bb97e8580dd0 74 }
AndreaS97 0:bb97e8580dd0 75 if(val=='B'){ //MANCA CHIUSURA CON SERVO
AndreaS97 0:bb97e8580dd0 76 pc.printf("Closing..."); //chiusura servo e abilitazione allarme, ritorno al reinserimento pass.
AndreaS97 0:bb97e8580dd0 77 wait(4);
AndreaS97 0:bb97e8580dd0 78 alonoff=true;
AndreaS97 0:bb97e8580dd0 79 main();
AndreaS97 0:bb97e8580dd0 80 }
AndreaS97 0:bb97e8580dd0 81 if(val=='C'){ //cambio password:
AndreaS97 0:bb97e8580dd0 82 char v[dim];
AndreaS97 0:bb97e8580dd0 83 pc.printf("Enter new password: ");
AndreaS97 0:bb97e8580dd0 84 inserimento(v,dim);
AndreaS97 0:bb97e8580dd0 85 pc.printf("New password is %c %c %c %c, push A to confirm or C to cancel",v[0],v[1],v[2],v[3]);
AndreaS97 0:bb97e8580dd0 86 inserimento(&val,1); //conferma della password inserita
AndreaS97 0:bb97e8580dd0 87 do{
AndreaS97 0:bb97e8580dd0 88 if(val=='A'){ //A=> Cambia la password con quella inserita e torna nel main (dove bisognerà, per
AndreaS97 0:bb97e8580dd0 89 pc.printf("Password changed \n"); //accedere al menu inserire di nuovo la password)
AndreaS97 0:bb97e8580dd0 90 for(int k=0;k<dim;k++){
AndreaS97 0:bb97e8580dd0 91 pass[k]=v[k];
AndreaS97 0:bb97e8580dd0 92 }
AndreaS97 0:bb97e8580dd0 93 main();
AndreaS97 0:bb97e8580dd0 94 }
AndreaS97 0:bb97e8580dd0 95 if(val=='C'){ //C=>Non cambiare la password e torna di nuovo al menu
AndreaS97 0:bb97e8580dd0 96 menu();
AndreaS97 0:bb97e8580dd0 97 }
AndreaS97 0:bb97e8580dd0 98 if(val!='A' && val!='C'){ //inserimento fin quando il valore è A o C.
AndreaS97 0:bb97e8580dd0 99 pc.printf("Not valid \n");
AndreaS97 0:bb97e8580dd0 100 }
AndreaS97 0:bb97e8580dd0 101 }while(val!='A' && val!='C');
AndreaS97 0:bb97e8580dd0 102 }
AndreaS97 0:bb97e8580dd0 103 }
AndreaS97 0:bb97e8580dd0 104 void alarm(){ //funzione allarme: (DA RIVEDERE)
AndreaS97 0:bb97e8580dd0 105 int cont=0;
AndreaS97 0:bb97e8580dd0 106 char insa[dim]; //DA VEDERE !!!!
AndreaS97 0:bb97e8580dd0 107 do{ //il buz deve suonare durante l'inserimento della password corretta
AndreaS97 0:bb97e8580dd0 108 buz=1; //per disattivare l'allarme stesso e accedere al menu
AndreaS97 0:bb97e8580dd0 109 wait(0.5);
AndreaS97 0:bb97e8580dd0 110 buz=0;
AndreaS97 0:bb97e8580dd0 111 wait(0.5);
AndreaS97 0:bb97e8580dd0 112
AndreaS97 0:bb97e8580dd0 113 inserimento(insa,dim);
AndreaS97 0:bb97e8580dd0 114 for(int h=0;h<dim;h++){
AndreaS97 0:bb97e8580dd0 115 if(insa[h]==pass[h]){
AndreaS97 0:bb97e8580dd0 116 cont++;
AndreaS97 0:bb97e8580dd0 117 }
AndreaS97 0:bb97e8580dd0 118 }
AndreaS97 0:bb97e8580dd0 119
AndreaS97 0:bb97e8580dd0 120 if(cont==dim){
AndreaS97 0:bb97e8580dd0 121 menu();
AndreaS97 0:bb97e8580dd0 122 cont=0;
AndreaS97 0:bb97e8580dd0 123 }
AndreaS97 0:bb97e8580dd0 124 if (cont!=dim){
AndreaS97 0:bb97e8580dd0 125 pc.printf("Password not valid \n");
AndreaS97 0:bb97e8580dd0 126 cont=0;
AndreaS97 0:bb97e8580dd0 127 }
AndreaS97 0:bb97e8580dd0 128
AndreaS97 0:bb97e8580dd0 129 }while(1);
AndreaS97 0:bb97e8580dd0 130
AndreaS97 0:bb97e8580dd0 131 }