Signori, dopo anni di sudore, lacrime e crampi allo stomaco, ce l'ho fatta

Dependencies:   HC05 mbed-rtos mbed

main.cpp

Committer:
LorenzoCR
Date:
2017-04-02
Revision:
0:e6c7f51b1ac2

File content as of revision 0:e6c7f51b1ac2:

#include "mbed.h"
#include "rtos.h"
#include "hcsr04.h"
#include "beep.h"
//dichiarazioni let e sensori
/******************************/
HCSR04 sensor1(PB_8, PB_9);
HCSR04 sensor2(PA_6, PA_5);
HCSR04 sensor3(PB_10, PB_4);
DigitalOut rossoC(D2);
DigitalOut gialloC(D3);
DigitalOut verdeC(D4);
Beep buzzer(D7);

DigitalOut rossoP(D8);
DigitalOut gialloP(D9);
DigitalOut verdeP(D10);

DigitalOut led(D11);
void giallo();
void semafori();
int i=0;
/******************************/

//sensore semaforo 1
/******************************/
void sensor1_thread(void const *args){
    while(true){    
    
    sensor1.start();
    wait_ms(100);
        
        if (sensor1.get_dist_cm() < 10){
        wait(5);           
        sensor1.start();
        wait_ms(100);
        wait(2);
            
            if (sensor1.get_dist_cm()< 10){
                semafori(); 
                
            }  
        }       
    }     
}
/******************************/

//sensore semaforo 2
/******************************/
void sensor2_thread(void const *args){    
    while(true){
        
        sensor1.start();
        wait_ms(100);
        
        if (sensor2.get_dist_cm() < 10){
        wait(5);           
        sensor2.start();
        wait_ms(100);
        wait(2);
            
            if (sensor2.get_dist_cm()< 10){
                semafori(); 
                
            }  
        }
    }   
}    
/******************************/

int main(){
   //inizializzazione
   /******************************/
   rossoP=1;
   verdeP=0;
   gialloP=0;
   gialloC=0;
   rossoC=0;
   verdeC=1;
  
   Thread th1(sensor1_thread);
   Thread th2(sensor2_thread);
   /******************************/
    while(1) {
     
    }  
}
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);
                wait_ms(200);
                buzzer.nobeep();
                buzzer.beep(1000,0.1);
                wait_ms(200);
                buzzer.nobeep();                                
            } 
            /******************************/
            sensor3.start();
            wait_ms(100);
            if(sensor3.get_dist_cm()<50){
              n=1;
              led=1;
            }            
    }while(n==1);
    wait_ms(200);
    led=0;
}
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(200,10);  
            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;    
}