A
Dependencies: mbed Servo KeypadLib TextLCD
Cassaforte.cpp
- Committer:
- AndreaS97
- Date:
- 2018-12-04
- Revision:
- 1:02c938489de7
- Parent:
- 0:5f8790dfc90c
- Child:
- 2:74c155c71eb5
File content as of revision 1:02c938489de7:
#include "Cassaforte.h" #include "TextLCD.h" #include "Servo.h" #include "keypad.h" I2C i2c(D14, D15); //InterruptIn button(PC_13); TextLCD_I2C lcd(&i2c, 0x4E, TextLCD_I2C::LCD16x2, TextLCD_I2C::HD44780); DigitalOut led(LED1); Servo servo(D11); int dim=4; 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(D1); //porta del magnete bool alonoff=true; //variabile booleana per abilitare o disabilitare l'allarme in caso di apertura e chiusura (?) void inizializza(){ lcd.setMode(TextLCD_I2C::DispOn); lcd.setCursor(TextLCD_I2C::CurOn_BlkOn); } void scrivi(char parola[]){ lcd.cls(); lcd.printf("%s\n", parola); } void chiuso(){ servo.position(-90); } void aperto(){ servo.position(-90); } void inserimento(char a[],int n){ //funzione di acquisizione dal tastierino keypad.enablePullUp(); for(int k=0;k<n;k++){ keypad.enablePullUp(); char val = keypad.getKey(); if(val != KEY_RELEASED){ //se qualche tasto è premuto stampalo e mettilo nell'array lcd.putc(val); lcd.setAddress(k,1); a[k]=val; wait(0.4); } } } void menu(){ //funzione menu (si accede quando la password è corretta) scrivi("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) scrivi("Not Valid"); //se il valore è diverso da A, B o C ripeti l'inserimento. } }while(val!='A' && val!='B' && val!='C'); if(val=='A'){ if(mag==1){ scrivi("Opening... \n"); alonoff=false; aperto(); wait(2); menu(); } } if(val=='B'){ if(mag==0){ //MANCA CHIUSURA CON SERVO scrivi("Closing..."); alonoff=true; chiuso(); //chiusura servo e abilitazione allarme, ritorno al reinserimento pass. wait(2); main(); } } if(val=='C'){ //cambio password: char v[dim]; scrivi("Enter new password: "); inserimento(v,dim); // scrivi("New password is %c %c %c %c, push A to confirm or C to cancel",v[0],v[1],v[2],v[3]); scrivi("Il codice è:"); for(int i=0;i<4;i++){ lcd.putc(v[i]); lcd.setAddress(i+13,0); } lcd.printf("A:ok, C:annulla"); 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 scrivi("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. scrivi("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){ scrivi("Password not valid \n"); cont=0; } }while(1); }