Laboratorio CAD
/
ProgettoCassaforte
Progetto cassaforte
main.cpp
- Committer:
- AndreaS97
- Date:
- 2018-12-04
- Revision:
- 0:bb97e8580dd0
File content as of revision 0:bb97e8580dd0:
#include "mbed.h" #include "keypad.h" int dim=4; Serial pc(USBTX, USBRX); Keypad keypad(D6,D5,D4,D3,D10,D9,D8,D7); //porte del tastierino char pass[4]={'1','2','3','4'}; //password di default (è possibile cambiarla dal menu) DigitalOut buz(D2); //porta buz DigitalIn mag(D11); //porta del magnete bool alonoff=true; //variabile booleana per abilitare o disabilitare l'allarme in caso di apertura e chiusura (?) void inserimento(char[],int); //funzione per inserire parametri dal tastierino void menu(); //funzione per andare al menu (dove è possibile cambiare pas, aprire ecc... void alarm(); //funzione allarme (attiva il buz e fa inserire il codice per la disattivazione) int i=0; int main(){ char vet[dim]; int cont; int tent=0; //MANCA LA PARTE RELATIVA AL MAGNETICO (Magnetico aperto(mag=0) => suona se l'allarme è inserito) do{ cont=0; pc.printf("Insert password: "); //inserimento della password inserimento(vet,dim); for(int p=0;p<dim;p++){ //confronto con la password if (vet[p]==pass[p]){ cont++; } } if (cont==dim){ //se il confronto è andato bene vai al menu e disattiva l'allarme pc.printf("The password is correct \n"); alonoff=false; menu(); } if(cont!=dim){ //se il confronto non è andato incrementa i tentativi e si riparte da capo pc.printf("Password not valid"); tent++; if (tent==3){ //se i tentativi sono più di tre chiama la funzione allarme alarm(); } } }while(1); //il while(1) permette di ripetere l'operazione di continuo, si esce solo } //saltanto alla funzione allarme o menu, dalle due funzioni poi si potrà //ritornare al main richiamandolo da capo. void inserimento(char a[],int n){ //funzione di acquisizione dal tastierino i=0; do{ keypad.enablePullUp(); char val = keypad.getKey(); if(val != KEY_RELEASED){ //se qualche tasto è premuto stampalo e mettilo nell'array pc.printf("%c ",val); a[i]=val; i++; wait(0.4); } }while(i<n); //ripeti fino alla dimensione dell'array richiesto } void menu(){ //funzione menu (si accede quando la password è corretta) pc.printf("A to open, B to Block, C to Change password "); char val; do{ inserimento(&val,1); //inserimento dell'opzione scelta dal tastierino (in questo caso la dimensione è 1 e poichè la funzione if(val!='A' && val!='B' && val!='C'){ //accetta solo variabile indirizzo bisogna mandare l'indirizzo di val) pc.printf("Not Valid"); //se il valore è diverso da A, B o C ripeti l'inserimento. } }while(val!='A' && val!='B' && val!='C'); if(val=='A'){ //MANCA APERTURA CON SERVO pc.printf("Opening... \n"); //apertura col servo e disattivazione dell'allarme (altrimenti se il magnetico si apre menu(); //si va in allarme) } if(val=='B'){ //MANCA CHIUSURA CON SERVO pc.printf("Closing..."); //chiusura servo e abilitazione allarme, ritorno al reinserimento pass. wait(4); alonoff=true; main(); } if(val=='C'){ //cambio password: char v[dim]; pc.printf("Enter new password: "); inserimento(v,dim); 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]); inserimento(&val,1); //conferma della password inserita do{ if(val=='A'){ //A=> Cambia la password con quella inserita e torna nel main (dove bisognerà, per pc.printf("Password changed \n"); //accedere al menu inserire di nuovo la password) for(int k=0;k<dim;k++){ pass[k]=v[k]; } main(); } if(val=='C'){ //C=>Non cambiare la password e torna di nuovo al menu menu(); } if(val!='A' && val!='C'){ //inserimento fin quando il valore è A o C. pc.printf("Not valid \n"); } }while(val!='A' && val!='C'); } } void alarm(){ //funzione allarme: (DA RIVEDERE) int cont=0; char insa[dim]; //DA VEDERE !!!! do{ //il buz deve suonare durante l'inserimento della password corretta buz=1; //per disattivare l'allarme stesso e accedere al menu wait(0.5); buz=0; wait(0.5); inserimento(insa,dim); for(int h=0;h<dim;h++){ if(insa[h]==pass[h]){ cont++; } } if(cont==dim){ menu(); cont=0; } if (cont!=dim){ pc.printf("Password not valid \n"); cont=0; } }while(1); }