A

Dependencies:   mbed Servo KeypadLib TextLCD

Cassaforte.cpp

Committer:
Virgi97
Date:
2018-12-06
Revision:
3:c64c5ac14d22
Parent:
2:74c155c71eb5

File content as of revision 3:c64c5ac14d22:

#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
DigitalOut led_verde(D13);  //led apertura
DigitalOut led_rosso(D12);  // led chiusura
DigitalOut buz(PC_10); //porta buz
DigitalIn mag(PC_13); //porta del magnete
int dim=4;
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 (?)

void inizializza(){
    lcd.setMode(TextLCD_I2C::DispOn);
    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;
    Timer t;
    t.start();
    do{
    keypad.enablePullUp();
    char val = keypad.getKey();
    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(){ 
    
    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(){   
    char insa[4];                     
        do{                
            buz=1;         
            scrivi("    Allarme!");
            inserimento(insa,4,true);
            
            if(confronto(insa,4)==true){
                buz=0;
                menu();
                }
            }while(1);
        
}