![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
A
Dependencies: mbed Servo KeypadLib TextLCD
Cassaforte.cpp@3:c64c5ac14d22, 2018-12-06 (annotated)
- Committer:
- Virgi97
- Date:
- Thu Dec 06 11:24:46 2018 +0000
- Revision:
- 3:c64c5ac14d22
- Parent:
- 2:74c155c71eb5
A
Who changed what in which revision?
User | Revision | Line number | New 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 | } |