Il codice implementa il buzzer attivo monotonale

Dependencies:   mbed Servo KeypadLib TextLCD

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Cassaforte.cpp Source File

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     }