A

Dependencies:   mbed Servo KeypadLib TextLCD

Committer:
Virgi97
Date:
Thu Dec 06 11:24:46 2018 +0000
Revision:
3:c64c5ac14d22
Parent:
2:74c155c71eb5
A

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Virgi97 0:5f8790dfc90c 1 #include "Cassaforte.h"
Virgi97 0:5f8790dfc90c 2 #include "TextLCD.h"
Virgi97 0:5f8790dfc90c 3 #include "Servo.h"
AndreaS97 1:02c938489de7 4 #include "keypad.h"
Virgi97 0:5f8790dfc90c 5 I2C i2c(D14, D15);
Virgi97 3:c64c5ac14d22 6 TextLCD_I2C lcd(&i2c, 0x4E, TextLCD_I2C::LCD16x2, TextLCD_I2C::HD44780); //comunicazione Nucleo-display
AndreaS97 1:02c938489de7 7 Keypad keypad(D6,D5,D4,D3,D10,D9,D8,D7); //porte del tastierino
Virgi97 3:c64c5ac14d22 8 Servo servo(D11); //porta servo
Virgi97 3:c64c5ac14d22 9 DigitalOut led_verde(D13); //led apertura
Virgi97 3:c64c5ac14d22 10 DigitalOut led_rosso(D12); // led chiusura
Virgi97 3:c64c5ac14d22 11 DigitalOut buz(PC_10); //porta buz
Virgi97 3:c64c5ac14d22 12 DigitalIn mag(PC_13); //porta del magnete
Virgi97 3:c64c5ac14d22 13 int dim=4;
AndreaS97 2:74c155c71eb5 14 char pass[4]={'1','2','3','4'};//password di default (è possibile cambiarla dal menu)
AndreaS97 1:02c938489de7 15 bool alonoff=true; //variabile booleana per abilitare o disabilitare l'allarme in caso di apertura e chiusura (?)
Virgi97 0:5f8790dfc90c 16
Virgi97 0:5f8790dfc90c 17 void inizializza(){
Virgi97 0:5f8790dfc90c 18 lcd.setMode(TextLCD_I2C::DispOn);
AndreaS97 2:74c155c71eb5 19 buz=0;
Virgi97 3:c64c5ac14d22 20 if(mag == 1){
Virgi97 3:c64c5ac14d22 21 chiuso();
Virgi97 3:c64c5ac14d22 22 //wait(0.3);
Virgi97 3:c64c5ac14d22 23 } else aperto();
AndreaS97 2:74c155c71eb5 24 //lcd.setCursor(TextLCD_I2C::CurOn_BlkOn);
Virgi97 0:5f8790dfc90c 25 }
Virgi97 0:5f8790dfc90c 26
Virgi97 0:5f8790dfc90c 27 void scrivi(char parola[]){
Virgi97 0:5f8790dfc90c 28 lcd.cls();
Virgi97 0:5f8790dfc90c 29 lcd.printf("%s\n", parola);
Virgi97 0:5f8790dfc90c 30 }
AndreaS97 1:02c938489de7 31
Virgi97 0:5f8790dfc90c 32 void chiuso(){
Virgi97 3:c64c5ac14d22 33 servo.position(90);
Virgi97 3:c64c5ac14d22 34 wait(0.3);
Virgi97 3:c64c5ac14d22 35 led_rosso = 1;
Virgi97 3:c64c5ac14d22 36 led_verde = 0;
Virgi97 0:5f8790dfc90c 37 }
Virgi97 0:5f8790dfc90c 38
Virgi97 0:5f8790dfc90c 39 void aperto(){
Virgi97 0:5f8790dfc90c 40 servo.position(-90);
Virgi97 3:c64c5ac14d22 41 wait(0.3);
Virgi97 3:c64c5ac14d22 42 led_rosso = 0;
Virgi97 3:c64c5ac14d22 43 led_verde = 1;
AndreaS97 1:02c938489de7 44 }
AndreaS97 2:74c155c71eb5 45 void inserimento(char a[],int n,bool vis){
AndreaS97 2:74c155c71eb5 46 int i=0;
AndreaS97 2:74c155c71eb5 47 Timer t;
AndreaS97 2:74c155c71eb5 48 t.start();
AndreaS97 2:74c155c71eb5 49 do{
AndreaS97 1:02c938489de7 50 keypad.enablePullUp();
AndreaS97 1:02c938489de7 51 char val = keypad.getKey();
AndreaS97 2:74c155c71eb5 52 if(t.read()>20 && buz==0){ //CHIUSURA dopo 20 secondi dal mancato inserimento
AndreaS97 2:74c155c71eb5 53 main();
AndreaS97 2:74c155c71eb5 54 }
AndreaS97 2:74c155c71eb5 55 if(val != KEY_RELEASED){
AndreaS97 2:74c155c71eb5 56 if(vis==true){
AndreaS97 2:74c155c71eb5 57 lcd.putc(val);
AndreaS97 2:74c155c71eb5 58 lcd.setAddress(i+1,1);
AndreaS97 2:74c155c71eb5 59 }
AndreaS97 2:74c155c71eb5 60 a[i]=val;
AndreaS97 2:74c155c71eb5 61 i++;
AndreaS97 1:02c938489de7 62 wait(0.4);
AndreaS97 2:74c155c71eb5 63
AndreaS97 1:02c938489de7 64 }
AndreaS97 1:02c938489de7 65
AndreaS97 2:74c155c71eb5 66 }while(i<n);
AndreaS97 2:74c155c71eb5 67
AndreaS97 2:74c155c71eb5 68 }
AndreaS97 2:74c155c71eb5 69 bool confronto(char v[],int dim){
AndreaS97 2:74c155c71eb5 70 int cont=0;
AndreaS97 2:74c155c71eb5 71 for(int i=0;i<dim;i++){
AndreaS97 2:74c155c71eb5 72 if (v[i]==pass[i]){
AndreaS97 2:74c155c71eb5 73 cont++;
AndreaS97 2:74c155c71eb5 74 }
AndreaS97 2:74c155c71eb5 75 }
AndreaS97 2:74c155c71eb5 76 if (cont==4){
AndreaS97 2:74c155c71eb5 77 return true;
AndreaS97 2:74c155c71eb5 78 }
AndreaS97 2:74c155c71eb5 79 else{
AndreaS97 2:74c155c71eb5 80 return false;
AndreaS97 1:02c938489de7 81 }
AndreaS97 1:02c938489de7 82 }
AndreaS97 2:74c155c71eb5 83
AndreaS97 2:74c155c71eb5 84 void menu(){
AndreaS97 1:02c938489de7 85
AndreaS97 2:74c155c71eb5 86 scrivi("A Apri B BloccaC Cambia codice");
AndreaS97 1:02c938489de7 87 char val;
AndreaS97 1:02c938489de7 88 do{
AndreaS97 2:74c155c71eb5 89 inserimento(&val,1,false);
AndreaS97 2:74c155c71eb5 90
AndreaS97 1:02c938489de7 91 }while(val!='A' && val!='B' && val!='C');
AndreaS97 1:02c938489de7 92
AndreaS97 1:02c938489de7 93 if(val=='A'){
AndreaS97 2:74c155c71eb5 94 //if(mag==1){
AndreaS97 2:74c155c71eb5 95 scrivi("Apertura...");
AndreaS97 1:02c938489de7 96 alonoff=false;
AndreaS97 1:02c938489de7 97 aperto();
Virgi97 3:c64c5ac14d22 98 wait(0.3); //2
AndreaS97 1:02c938489de7 99 menu();
AndreaS97 2:74c155c71eb5 100 // }
AndreaS97 1:02c938489de7 101 }
AndreaS97 1:02c938489de7 102 if(val=='B'){
AndreaS97 2:74c155c71eb5 103 if(mag==0){
AndreaS97 2:74c155c71eb5 104 scrivi("Chiusura...");
AndreaS97 1:02c938489de7 105 alonoff=true;
AndreaS97 2:74c155c71eb5 106 chiuso();
Virgi97 3:c64c5ac14d22 107 wait(0.3); //2
AndreaS97 1:02c938489de7 108 main();
AndreaS97 1:02c938489de7 109 }
AndreaS97 1:02c938489de7 110 }
AndreaS97 2:74c155c71eb5 111 if(val=='C'){
AndreaS97 1:02c938489de7 112 char v[dim];
AndreaS97 2:74c155c71eb5 113 scrivi("Nuovo codice:");
AndreaS97 2:74c155c71eb5 114 inserimento(v,dim,true);
AndreaS97 2:74c155c71eb5 115 scrivi("Codice: ");
AndreaS97 1:02c938489de7 116 for(int i=0;i<4;i++){
AndreaS97 2:74c155c71eb5 117 lcd.setAddress(i+12,0);
AndreaS97 1:02c938489de7 118 lcd.putc(v[i]);
AndreaS97 1:02c938489de7 119 }
AndreaS97 2:74c155c71eb5 120 lcd.printf("A:ok C:annulla");
AndreaS97 1:02c938489de7 121 do{
AndreaS97 2:74c155c71eb5 122 inserimento(&val,1,false);
AndreaS97 2:74c155c71eb5 123 if(val=='A'){
AndreaS97 2:74c155c71eb5 124 scrivi("Codice cambiato.");
AndreaS97 2:74c155c71eb5 125 wait(1);
AndreaS97 1:02c938489de7 126 for(int k=0;k<dim;k++){
AndreaS97 2:74c155c71eb5 127 pass[k]=v[k];
AndreaS97 1:02c938489de7 128 }
AndreaS97 2:74c155c71eb5 129 main();
AndreaS97 1:02c938489de7 130 }
AndreaS97 2:74c155c71eb5 131 if(val=='C'){
AndreaS97 1:02c938489de7 132 menu();
AndreaS97 1:02c938489de7 133 }
AndreaS97 2:74c155c71eb5 134
AndreaS97 2:74c155c71eb5 135 }while(1);
AndreaS97 1:02c938489de7 136 }
AndreaS97 1:02c938489de7 137 }
AndreaS97 2:74c155c71eb5 138 void allarme(){
Virgi97 3:c64c5ac14d22 139 char insa[4];
AndreaS97 2:74c155c71eb5 140 do{
AndreaS97 2:74c155c71eb5 141 buz=1;
AndreaS97 2:74c155c71eb5 142 scrivi(" Allarme!");
AndreaS97 2:74c155c71eb5 143 inserimento(insa,4,true);
AndreaS97 1:02c938489de7 144
AndreaS97 2:74c155c71eb5 145 if(confronto(insa,4)==true){
AndreaS97 2:74c155c71eb5 146 buz=0;
AndreaS97 2:74c155c71eb5 147 menu();
AndreaS97 1:02c938489de7 148 }
AndreaS97 1:02c938489de7 149 }while(1);
AndreaS97 1:02c938489de7 150
AndreaS97 1:02c938489de7 151 }