akuygry
Dependencies: mbed Servo KeypadLib TextLCD
Diff: Cassaforte.cpp
- Revision:
- 1:02c938489de7
- Parent:
- 0:5f8790dfc90c
--- a/Cassaforte.cpp Tue Dec 04 10:11:08 2018 +0000 +++ b/Cassaforte.cpp Tue Dec 04 11:50:39 2018 +0000 @@ -1,59 +1,29 @@ #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(D3); -bool sensore = false; +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); - if (sensore == true) - chiuso(); - else aperto(); } void scrivi(char parola[]){ lcd.cls(); lcd.printf("%s\n", parola); } - -void cambioCodice(){ - led=!led; - scrivi("Cambio codice di apertura"); - lcd.setAddress(11,1); - wait(3); - lcd.cls(); - scrivi("Digitare il nuo_vo codice:"); - lcd.setAddress(10,1); - inserimento(); - led=!led; - } - -void inserimento(){ - /*for (int i=0; i<4; i++){ - wait(1); - lcd.putc(i); - wait(1); - lcd.setAddress(11+i,1); - }*/ - wait(1); - lcd.putc('1'); - wait(1); - lcd.setAddress(11,1); - lcd.putc('2'); - wait(1); - lcd.setAddress(12,1); - lcd.putc('3'); - wait(1); - lcd.setAddress(13,1); - lcd.putc('4'); - wait(1); - } - + void chiuso(){ servo.position(-90); @@ -62,4 +32,104 @@ void aperto(){ servo.position(-90); - } \ No newline at end of file + } +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); + +} \ No newline at end of file