slave funzionante

Dependencies:   HCSR04 beep mbed-rtos mbed

main.cpp

Committer:
huntR
Date:
2017-04-28
Revision:
0:ffca8ab7f43f

File content as of revision 0:ffca8ab7f43f:

#include "mbed.h"
#include "rtos.h"
#include "hcsr04.h"
#include "beep.h"
//dichiarazioni let e sensori
//sensori ad ultrasuoni
/******************************/
//bluetooth
Serial blue(D10,D2);
/******************************/
HCSR04 sensor1(D15, D14);
HCSR04 sensor2(D12, D13);
//HCSR04 sensor3(D11, D9);
/******************************/
//Led per le macchine
DigitalOut rossoC(PA_0);//led
DigitalOut gialloC(D5);
DigitalOut verdeC(D3);
/******************************/
//buzzer
Beep buzzer(D4);
/******************************/
//led per i pedoni
DigitalOut rossoP(D6);
DigitalOut gialloP(D7);
DigitalOut verdeP(D8);
/******************************/
/******************************/
//dichiarazione funzioni
void giallo();
void semafori();
/******************************/
int i=0;
char riceviBlue = '0';
bool gianello=false;
bool visto = false;
int cont =0;
/******************************/

//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('B');                
                wait_ms(100);
                semafori();
                visto=false;
            }
        }
    }     
}
/******************************/

//controllo borini
/******************************/
void iezzo (void const *args){
    while(true){
        if(blue.readable()){
            riceviBlue = blue.getc();
        }
        if(riceviBlue == 'A')
        {
            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(iezzo);
   /******************************/
    while(1){
        if(!gianello){
            wait_ms(500);
            sensori();
        }
    }  
}
void giallo(){
    //giallo per i pedoni e rosso per le macchine  
    
    int n;
    do{
            n=0;
            verdeP=0;
            gialloP=1;       
           //bippata del buzzer
           /******************************/
            for(i=0;i<10;i++){
                buzzer.beep(500,0.1);
                gialloP=1;
                wait_ms(200);
                buzzer.nobeep();
                buzzer.beep(1000,0.1);
                gialloP=1;
                gialloP=1;
                wait_ms(200);
                buzzer.nobeep();                                
                gialloP=1;
            } 
            /******************************/                       
            wait_ms(100);                 
    }while(n==1);
    wait_ms(100);   
}
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
            do{   
                giallo();
                riceviBlue=blue.getc();
                
            }while(riceviBlue=='L');
            cont = 0;
            //rosso ai pedoni e verde alle automobili
            gialloP=0;
            rossoP=1; 
            rossoC=0;
            verdeC=1;
            wait_ms(5000);
}