Il codice implementa il buzzer attivo monotonale
Dependencies: mbed Servo KeypadLib TextLCD
Cassaforte.cpp
00001 #include "Cassaforte.h" 00002 #include "TextLCD.h" 00003 #include "Servo.h" 00004 #include "keypad.h" 00005 I2C i2c(D14, D15); 00006 TextLCD_I2C lcd(&i2c, 0x4E, TextLCD_I2C::LCD16x2, TextLCD_I2C::HD44780); //comunicazione Nucleo-display 00007 Keypad keypad(D6,D5,D4,D3,D10,D9,D8,D7); //porte del tastierino 00008 Servo servo(D11); //porta servo 00009 //PwmOut buzzer(D2); 00010 //Ticker t; 00011 Timeout t1; 00012 DigitalOut led_verde(D13); //led apertura 00013 DigitalOut led_rosso(D12); //led chiusura 00014 DigitalOut buz(D2); //porta buz 00015 DigitalIn mag(PC_10); //porta del magnete 00016 int dim=4; 00017 //int buz=0; 00018 char pass[4]={'1','2','3','4'};//password di default (è possibile cambiarla dal menu) 00019 bool alonoff=true; //variabile booleana per abilitare o disabilitare l'allarme in caso di apertura e chiusura (?) 00020 bool jump = false; 00021 00022 void inizializza(){ 00023 lcd.setMode(TextLCD_I2C::DispOn); 00024 lcd.setBacklight(TextLCD_I2C::LightOff); 00025 buz=0; 00026 00027 if(mag == 0){ 00028 chiuso(); 00029 //wait(0.3); 00030 } else { 00031 aperto(); 00032 alonoff = false; 00033 } 00034 //lcd.setCursor(TextLCD_I2C::CurOn_BlkOn); 00035 } 00036 00037 void scrivi(char parola[]){ 00038 lcd.cls(); 00039 lcd.printf("%s\n", parola); 00040 } 00041 00042 void chiuso(){ 00043 servo.position(90); 00044 wait(0.3); 00045 led_rosso = 1; 00046 led_verde = 0; 00047 } 00048 00049 void aperto(){ 00050 servo.position(-90); 00051 wait(0.3); 00052 led_rosso = 0; 00053 led_verde = 1; 00054 } 00055 void inserimento(char a[],int n,bool vis){ 00056 int i=0; 00057 jump = false; 00058 /*Timer t; 00059 t.reset(); 00060 t.start();*/ 00061 t1.attach(&salta, 20); 00062 do{ 00063 keypad.enablePullUp(); 00064 char val = keypad.getKey(); 00065 if(/*t.read()>20*/jump == true && buz==0){ //CHIUSURA dopo 20 secondi dal mancato inserimento 00066 main(); 00067 } 00068 if(val != KEY_RELEASED){ 00069 if(vis==true){ 00070 lcd.putc(val); 00071 lcd.setAddress(i+1,1); 00072 } 00073 a[i]=val; 00074 i++; 00075 wait(0.4); 00076 00077 } 00078 }while(i<n); 00079 00080 } 00081 00082 bool confronto(char v[],int dim){ 00083 int cont=0; 00084 for(int i=0;i<dim;i++){ 00085 if (v[i]==pass[i]){ 00086 cont++; 00087 } 00088 } 00089 if (cont==4){ 00090 return true; 00091 } 00092 else{ 00093 return false; 00094 } 00095 } 00096 00097 void menu(){ 00098 scrivi("A Apri B BloccaC Cambia codice"); 00099 char val; 00100 do{ 00101 inserimento(&val,1,false); 00102 00103 }while(val!='A' && val!='B' && val!='C'); 00104 00105 if(val=='A'){ 00106 //if(mag==1){ 00107 scrivi("Apertura..."); 00108 alonoff=false; 00109 aperto(); 00110 wait(0.3); //2 00111 menu(); 00112 // } 00113 } 00114 if(val=='B'){ 00115 if(mag==0){ 00116 scrivi("Chiusura..."); 00117 alonoff=true; 00118 chiuso(); 00119 wait(0.3); //2 00120 main(); 00121 }else{ 00122 scrivi("Chiudere la porta"); 00123 wait(1); 00124 menu(); 00125 } 00126 } 00127 if(val=='C'){ 00128 char v[dim]; 00129 scrivi("Nuovo codice:"); 00130 inserimento(v,dim,true); 00131 scrivi("Codice: "); 00132 for(int i=0;i<4;i++){ 00133 lcd.setAddress(i+12,0); 00134 lcd.putc(v[i]); 00135 } 00136 lcd.printf("A:ok C:annulla"); 00137 do{ 00138 inserimento(&val,1,false); 00139 if(val=='A'){ 00140 scrivi("Codice cambiato."); 00141 wait(1); 00142 for(int k=0;k<dim;k++){ 00143 pass[k]=v[k]; 00144 } 00145 main(); 00146 } 00147 if(val=='C'){ 00148 menu(); 00149 } 00150 00151 }while(1); 00152 } 00153 } 00154 00155 void allarme(){ 00156 bool esci = true; 00157 char insa[4]; 00158 //t.attach(&suona, 1); 00159 do{ 00160 buz=1; 00161 scrivi(" Allarme!"); 00162 inserimento(insa,4,true); 00163 00164 00165 if(confronto(insa,4)==true){ 00166 buz=0; 00167 esci = false; 00168 //t.detach; 00169 } 00170 }while(esci); 00171 //scrivi("Attendere..."); 00172 t1.attach(&salta, 0.5); 00173 } 00174 00175 void controllo(){ 00176 if (alonoff == true){ 00177 allarme(); 00178 } 00179 } 00180 00181 /*void suona (float freq1, float freq2, float t1, float t2 float v[]){ 00182 buzzer.period_ms(3); 00183 buzzer.write(0.1); 00184 wait(0.5); 00185 buzzer.write(0.5); 00186 wait(0.5); 00187 }*/ 00188 00189 void salta(){ 00190 jump = true; 00191 }
Generated on Mon Jul 18 2022 01:18:35 by 1.7.2