Laboratorio CAD
/
ProgettoCassaforte
Progetto cassaforte
main.cpp@0:bb97e8580dd0, 2018-12-04 (annotated)
- Committer:
- AndreaS97
- Date:
- Tue Dec 04 10:09:41 2018 +0000
- Revision:
- 0:bb97e8580dd0
Cassaforte Yo
Who changed what in which revision?
User | Revision | Line number | New 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 | } |