Completo

Dependencies:   mbed Servo KeypadLib TextLCD

Cassaforte.cpp

Committer:
Virgi97
Date:
2018-12-10
Revision:
2:ca52e00afb99
Parent:
1:0661b733846e

File content as of revision 2:ca52e00afb99:

#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_10); //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 == 0){
        chiuso();
        //wait(0.3);
        } else {
            aperto();
            alonoff = false;
            }
    //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();
            }else{
                scrivi("Chiudere la     porta");
                wait(1);
                menu();
                }
        }
    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;
    }