Completo

Dependencies:   mbed Servo KeypadLib TextLCD

Revision:
1:0661b733846e
Child:
2:ca52e00afb99
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cassaforte.cpp	Sun Dec 09 22:01:57 2018 +0000
@@ -0,0 +1,184 @@
+#include "Cassaforte.h"
+#include "TextLCD.h"
+#include "Servo.h"
+#include "keypad.h"
+I2C i2c(D14, D15);
+TextLCD_I2C lcd(&i2c, 0x4E, TextLCD_I2C::LCD16x2, TextLCD_I2C::HD44780);    //comunicazione Nucleo-display
+Keypad keypad(D6,D5,D4,D3,D10,D9,D8,D7); //porte del tastierino
+Servo servo(D11);           //porta servo
+//PwmOut buzzer(D2);
+//Ticker t;
+Timeout t1;
+DigitalOut led_verde(D13);  //led apertura
+DigitalOut led_rosso(D12);  //led chiusura
+DigitalOut buz(D2); //porta buz
+DigitalIn mag(PC_13); //porta del magnete
+int dim=4;
+//int buz=0;
+char pass[4]={'1','2','3','4'};//password di default (è possibile cambiarla dal menu)
+bool alonoff=true;  //variabile booleana per abilitare o disabilitare l'allarme in caso di apertura e chiusura (?)
+bool jump = false;
+
+void inizializza(){
+    lcd.setMode(TextLCD_I2C::DispOn);
+    lcd.setBacklight(TextLCD_I2C::LightOff);
+    buz=0;
+    
+    if(mag == 1){
+        chiuso();
+        //wait(0.3);
+        } else aperto();
+    //lcd.setCursor(TextLCD_I2C::CurOn_BlkOn);
+    }
+
+void scrivi(char parola[]){
+    lcd.cls();
+    lcd.printf("%s\n", parola);
+    }
+       
+void chiuso(){
+    servo.position(90);
+    wait(0.3);
+    led_rosso = 1;
+    led_verde = 0;
+    }
+    
+void aperto(){
+    servo.position(-90);
+    wait(0.3);
+    led_rosso = 0;
+    led_verde = 1;
+    }
+void inserimento(char a[],int n,bool vis){
+    int i=0;
+    jump = false; 
+    /*Timer t;
+    t.reset();
+    t.start();*/
+    t1.attach(&salta, 20);
+    do{
+        keypad.enablePullUp();
+        char val = keypad.getKey();
+        if(/*t.read()>20*/jump == true && 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(){
+    scrivi("A Apri  B BloccaC Cambia codice");
+    char val;
+    do{
+        inserimento(&val,1,false);
+            
+    }while(val!='A' && val!='B' && val!='C');
+    
+    if(val=='A'){  
+        //if(mag==1){                               
+            scrivi("Apertura...");
+            alonoff=false;
+            aperto();
+            wait(0.3);  //2                          
+            menu();                   
+           // }
+        }
+    if(val=='B'){  
+        if(mag==0){                                
+            scrivi("Chiusura...");  
+            alonoff=true;
+            chiuso();      
+            wait(0.3);   //2
+            main();
+            }
+        }
+    if(val=='C'){       
+        char v[dim];
+        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.printf("A:ok  C:annulla");
+        do{
+            inserimento(&val,1,false);
+            if(val=='A'){           
+                scrivi("Codice cambiato.");
+                wait(1);   
+                for(int k=0;k<dim;k++){
+                    pass[k]=v[k]; 
+                    }
+                main();
+                }
+            if(val=='C'){      
+                menu();
+                }
+                
+        }while(1);  
+    }
+}
+
+void allarme(){
+    bool esci = true;
+    char insa[4];
+    //t.attach(&suona, 1);                     
+        do{              
+            buz=1;         
+            scrivi("    Allarme!");
+            inserimento(insa,4,true);
+            
+            
+            if(confronto(insa,4)==true){
+                buz=0;
+                esci = false;
+                //t.detach;
+                }
+            }while(esci);
+    //scrivi("Attendere...");
+    t1.attach(&salta, 0.5);
+}
+
+void controllo(){
+    if (alonoff == true){
+        allarme();
+        }
+    }
+    
+/*void suona (float freq1, float freq2, float t1, float t2 float v[]){
+    buzzer.period_ms(3);
+    buzzer.write(0.1);
+    wait(0.5);
+    buzzer.write(0.5);
+    wait(0.5);
+    }*/
+    
+void salta(){
+    jump = true;
+    }
\ No newline at end of file