akuygry
Dependencies: mbed Servo KeypadLib TextLCD
Revision 1:02c938489de7, committed 2018-12-04
- Comitter:
- AndreaS97
- Date:
- Tue Dec 04 11:50:39 2018 +0000
- Parent:
- 0:5f8790dfc90c
- Commit message:
- Yo
Changed in this revision
--- 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
--- a/Cassaforte.h Tue Dec 04 10:11:08 2018 +0000 +++ b/Cassaforte.h Tue Dec 04 11:50:39 2018 +0000 @@ -1,10 +1,12 @@ #ifndef Cassaforte_H #define Cassaforte_H #include "mbed.h" +int main(); void inizializza(); void scrivi(char parola[]); -void cambioCodice(); -void inserimento(); +void inserimento(char[],int); void chiuso(); void aperto(); +void menu(); +void alarm(); #endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/KeypadLib.lib Tue Dec 04 11:50:39 2018 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/rlanghbv/code/KeypadLib/#1f7793af2f64
--- a/main.cpp Tue Dec 04 10:11:08 2018 +0000 +++ b/main.cpp Tue Dec 04 11:50:39 2018 +0000 @@ -1,5 +1,5 @@ #include "Cassaforte.h" -//#include "mbed.h" +#include "mbed.h" //#include <TextLCD.h> //I2C i2c(D14, D15); //TextLCD_I2C lcd(&i2c, 0x4E, TextLCD_I2C::LCD16x2, TextLCD_I2C::HD44780); @@ -8,16 +8,14 @@ void cambioCodice(); void inserisci();*/ InterruptIn button(PC_13); - +char v[4]; int main() { /*lcd.setMode(TextLCD_I2C::DispOn); lcd.setCursor(TextLCD_I2C::CurOn_BlkOn);*/ inizializza(); - button.rise(&cambioCodice); - while(1) { - scrivi("Cassaforte"); - wait(0.2); - } + scrivi("Immetti codice:"); + inserimento(v,4); + } /*void scrivi(char parola[]){