Completo
Dependencies: mbed Servo KeypadLib TextLCD
Diff: Cassaforte.cpp
- Revision:
- 1:0661b733846e
- Child:
- 2:ca52e00afb99
diff -r 376d7a150177 -r 0661b733846e Cassaforte.cpp --- /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