Il master

Dependencies:   HCSR04 beep mbed-rtos mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "hcsr04.h"
00004 #include "beep.h"
00005 /******************************/
00006 //bluetooth
00007 Serial blue(D10,D2);//tx e rx
00008 /******************************/
00009 //sensori ad ultrasuoni
00010 HCSR04 sensor1(D15, D14);
00011 HCSR04 sensor2(D12, D13);
00012 HCSR04 sensor3(D11, D9);
00013 /******************************/
00014 //dichiarazioni led
00015 //Led per le macchine
00016 DigitalOut rossoC(PA_0);
00017 DigitalOut gialloC(D5);
00018 DigitalOut verdeC(D3);
00019 /******************************/
00020 //led per i pedoni
00021 DigitalOut rossoP(D6);
00022 DigitalOut gialloP(D7);
00023 DigitalOut verdeP(D8);
00024 /******************************/
00025 //buzzer
00026 Beep buzzer(D4);
00027 /******************************/
00028 /******************************/
00029 //dichiarazione funzioni
00030 void giallo();
00031 void semafori();
00032 /******************************/
00033 //variabili
00034 int i=0;
00035 char riceviBlue = '0';
00036 bool gianello= false;
00037 bool visto = false;
00038 /******************************/ 
00039  
00040 //sensore semaforo 1
00041 /******************************/
00042 void sensori(){
00043     while(!visto && !gianello){
00044         sensor1.start();
00045         wait_ms(100);
00046         sensor2.start();
00047         wait_ms(100);
00048         if(sensor1.get_dist_cm()<10||sensor2.get_dist_cm()<10){
00049             wait(4);
00050             sensor1.start();
00051             wait_ms(100);
00052             sensor2.start();
00053             wait_ms(100);
00054             if(sensor1.get_dist_cm()<10||sensor2.get_dist_cm()<10&&!gianello){
00055                visto = true;
00056                 blue.putc('A');                
00057                 wait_ms(100);
00058                 semafori();
00059                 visto=false;
00060             }
00061         }
00062     }     
00063 }
00064 /******************************/
00065 //controllo borini 
00066 /******************************/
00067 void borini (void const *args){
00068     while(true){
00069         if(blue.readable()){
00070             riceviBlue = blue.getc();
00071         }
00072         if(riceviBlue == 'B')
00073         {
00074             gianello=true;
00075             riceviBlue='0';
00076             semafori();
00077             riceviBlue='0';
00078             gianello=false;
00079             visto=false;
00080         }
00081     }
00082 }
00083 /******************************/
00084 int main(){
00085    //inizializzazione
00086    /******************************/
00087    rossoP=1;
00088    verdeP=0;
00089    gialloP=0;
00090    gialloC=0;
00091    rossoC=0;
00092    verdeC=1;
00093    blue.baud(38400);
00094    /******************************/
00095 Thread th1(borini);  
00096     while(1){
00097        if(!gianello){
00098             sensori();
00099         }
00100     }  
00101 }
00102 void giallo(){
00103     int n;
00104     int cont =0;
00105     do{
00106             n=0;
00107             verdeP=0;
00108             gialloP=1;       
00109            //bippata del buzzer
00110            /******************************/
00111             for(i=0;i<10;i++){
00112                 buzzer.beep(1500,50);
00113                 wait_ms(200);
00114                 buzzer.nobeep();
00115                 buzzer.beep(2000,50);
00116                 wait_ms(200);
00117                 buzzer.nobeep();                                
00118             } 
00119             /******************************/
00120             sensor3.start();
00121             wait_ms(100);
00122             if(sensor3.get_dist_cm()<48){
00123                cont++;
00124                if(cont<=2)
00125                 blue.putc('L');
00126                n=1;               
00127             }
00128             wait_ms(100);            
00129     }while(n==1&&cont<=2);
00130     blue.putc('0');      
00131     wait_ms(200);
00132 }
00133 void semafori(){
00134     //giallo per le macchine, rosso per i pedoni       
00135             verdeC=0;
00136             gialloC=1;
00137             rossoC=0;
00138             wait(4);
00139             //rosso per le macchine, verde per i pedoni
00140             buzzer.beep(1200,50);  
00141             gialloC=0;
00142             rossoC=1;            
00143             rossoP=0;
00144             verdeP=1;            
00145             wait(10);
00146             buzzer.nobeep();
00147             //giallo per i pedoni e rosso per le macchine   
00148             giallo();
00149             //rosso ai pedoni e verde alle automobili
00150             gialloP=0;
00151             rossoP=1; 
00152             rossoC=0;
00153             verdeC=1;
00154             wait_ms(5000);
00155 }