Completo
Dependencies: mbed Servo KeypadLib TextLCD
Cassaforte.cpp
- Committer:
- Virgi97
- Date:
- 2018-12-10
- Revision:
- 3:3ea339885ed8
- Parent:
- 2:ca52e00afb99
File content as of revision 3:3ea339885ed8:
#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; }