A

Dependencies:   mbed Servo KeypadLib TextLCD

Revision:
2:74c155c71eb5
Parent:
1:02c938489de7
Child:
3:c64c5ac14d22
--- a/Cassaforte.cpp	Tue Dec 04 11:50:39 2018 +0000
+++ b/Cassaforte.cpp	Wed Dec 05 20:25:42 2018 +0000
@@ -3,20 +3,21 @@
 #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
+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);
+    buz=0;
+    //lcd.setCursor(TextLCD_I2C::CurOn_BlkOn);
     }
 
 void scrivi(char parola[]){
@@ -33,103 +34,112 @@
     servo.position(-90);
     
     }
-void inserimento(char a[],int n){ //funzione di acquisizione dal tastierino
-    keypad.enablePullUp();
-    for(int k=0;k<n;k++){
+void inserimento(char a[],int n,bool vis){ 
+    int i=0;
+    Timer t;
+    t.start();
+    do{
     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;
+    if(t.read()>20 && buz==0){       //CHIUSURA dopo 20 secondi dal mancato inserimento
+            main();                         
+            } 
+        if(val != KEY_RELEASED){ 
+                    if(vis==true){
+                        lcd.putc(val);
+                        lcd.setAddress(i+1,1);
+                    }
+                    a[i]=val;
+                    i++;
                     wait(0.4);
+                    
                 }
                 
+        }while(i<n);
+        
+}
+bool confronto(char v[],int dim){
+    int cont=0;
+    for(int i=0;i<dim;i++){
+        if (v[i]==pass[i]){
+            cont++;
+            }
+        }
+    if (cont==4){
+        return true;
+        }    
+    else{
+        return false;
         }
 }
-void menu(){ //funzione menu (si accede quando la password è corretta)
+
+void menu(){ 
     
-    scrivi("A to open, B to Block, C to Change password ");
+    scrivi("A Apri  B BloccaC Cambia codice");
     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.
-            }
+        inserimento(&val,1,false);
+            
     }while(val!='A' && val!='B' && val!='C');
     
     if(val=='A'){  
-        if(mag==1){                                 
-            scrivi("Opening... \n");
+        //if(mag==1){                               
+            scrivi("Apertura...");
             alonoff=false;
             aperto();
             wait(2);                            
             menu();                   
-            }
+           // }
         }
     if(val=='B'){  
-        if(mag==0){                                 //MANCA CHIUSURA CON SERVO
-            scrivi("Closing...");  
+        if(mag==0){                                
+            scrivi("Chiusura...");  
             alonoff=true;
-            chiuso();      //chiusura servo e abilitazione allarme, ritorno al reinserimento pass.
+            chiuso();      
             wait(2);
             main();
             }
         }
-    if(val=='C'){       //cambio password:
+    if(val=='C'){       
         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 è:");
+        scrivi("Nuovo codice:");
+        inserimento(v,dim,true);
+        scrivi("Codice: ");
         for(int i=0;i<4;i++){
+            lcd.setAddress(i+12,0);
             lcd.putc(v[i]);
-            lcd.setAddress(i+13,0);
             }
-        lcd.printf("A:ok, C:annulla");
-        inserimento(&val,1); //conferma della password inserita
+        lcd.printf("A:ok  C:annulla");
         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)
+            inserimento(&val,1,false);
+            if(val=='A'){           
+                scrivi("Codice cambiato.");
+                wait(1);   
                 for(int k=0;k<dim;k++){
-                    pass[k]=v[k];
+                    pass[k]=v[k]; 
                     }
-                    main();
+                main();
                 }
-            if(val=='C'){       //C=>Non cambiare la password e torna di nuovo al menu
+            if(val=='C'){      
                 menu();
                 }
-            if(val!='A' && val!='C'){ //inserimento fin quando il valore è A o C.
-                scrivi("Not valid \n");
-                }
-            }while(val!='A' && val!='C');  
+                
+        }while(1);  
     }
 }
-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);
+void allarme(){   
+
+        char insa[4];                     
+        do{                
+            buz=1;         
+            scrivi("    Allarme!");
+            inserimento(insa,4,true);
             
-                inserimento(insa,dim);
-                for(int h=0;h<dim;h++){
-                   if(insa[h]==pass[h]){
-                        cont++;
-                    }
+            if(confronto(insa,4)==true){
+                buz=0;
+                menu();
                 }
             
-                if(cont==dim){
-                    menu();
-                    cont=0;
-                    }
-                if (cont!=dim){
-                    scrivi("Password not valid \n");
-                    cont=0;
-                    }
-            
             }while(1);
         
 }
\ No newline at end of file