![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
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); }