dio

Dependencies:   mbed mbed-rtos beep hcsr04

main.cpp

Committer:
huntR
Date:
2017-04-28
Revision:
0:650a24681467
Child:
1:13556d8b4a34

File content as of revision 0:650a24681467:

#include "mbed.h"
#include "rtos.h"
#include "hcsr04.h"
#include "beep.h"
/******************************/
//bluetooth
Serial blue(D10,D2);//tx e rx
/******************************/
//sensori ad ultrasuoni
HCSR04 sensor1(D15, D14);
HCSR04 sensor2(D12, D13);
HCSR04 sensor3(D11, D9);
/******************************/
//dichiarazioni led
//Led per le macchine
DigitalOut rossoC(PA_0);
DigitalOut gialloC(D5);
DigitalOut verdeC(D3);
/******************************/
//led per i pedoni
DigitalOut rossoP(D6);
DigitalOut gialloP(D7);
DigitalOut verdeP(D8);
/******************************/
//buzzer
Beep buzzer(D4);
/******************************/
/******************************/
//dichiarazione funzioni
void giallo();
void semafori();
/******************************/
//variabili
int i=0;
char riceviBlue = '0';
bool gianello= false;
bool visto = false;
/******************************/ 
 
//sensore semaforo 1
/******************************/
void sensori(){
    while(!visto && !gianello){
        sensor1.start();
        wait_ms(100);
        sensor2.start();
        wait_ms(100);
        if(sensor1.get_dist_cm()<10||sensor2.get_dist_cm()<10){
            wait(4);
            sensor1.start();
            wait_ms(100);
            sensor2.start();
            wait_ms(100);
            if(sensor1.get_dist_cm()<10||sensor2.get_dist_cm()<10&&!gianello){
               visto = true;
                blue.putc('A');                
                wait_ms(100);
                semafori();
                visto=false;
            }
        }
    }     
}
/******************************/
//controllo borini 
/******************************/
void borini (void const *args){
    while(true){
        if(blue.readable()){
            riceviBlue = blue.getc();
        }
        if(riceviBlue == 'B')
        {
            gianello=true;
            riceviBlue='0';
            semafori();
            riceviBlue='0';
            gianello=false;
            visto=false;
        }
    }
}
/******************************/
int main(){
   //inizializzazione
   /******************************/
   rossoP=1;
   verdeP=0;
   gialloP=0;
   gialloC=0;
   rossoC=0;
   verdeC=1;
   blue.baud(38400);
   /******************************/
Thread th1(borini);  
    while(1){
       if(!gianello){
            sensori();
        }
    }  
}
void giallo(){
    int n;
    int cont =0;
    do{
            n=0;
            verdeP=0;
            gialloP=1;       
           //bippata del buzzer
           /******************************/
            for(i=0;i<10;i++){
                buzzer.beep(1500,50);
                wait_ms(200);
                buzzer.nobeep();
                buzzer.beep(2000,50);
                wait_ms(200);
                buzzer.nobeep();                                
            } 
            /******************************/
            sensor3.start();
            wait_ms(100);
            if(sensor3.get_dist_cm()<48){
               cont++;
               if(cont<=2)
                blue.putc('L');
               n=1;               
            }
            wait_ms(100);            
    }while(n==1&&cont<=2);
    blue.putc('0');      
    wait_ms(200);
}
void semafori(){
    //giallo per le macchine, rosso per i pedoni       
            verdeC=0;
            gialloC=1;
            rossoC=0;
            wait(4);
            //rosso per le macchine, verde per i pedoni
            buzzer.beep(1200,50);  
            gialloC=0;
            rossoC=1;            
            rossoP=0;
            verdeP=1;            
            wait(10);
            buzzer.nobeep();
            //giallo per i pedoni e rosso per le macchine   
            giallo();
            //rosso ai pedoni e verde alle automobili
            gialloP=0;
            rossoP=1; 
            rossoC=0;
            verdeC=1;
            wait_ms(5000);
}