V1

Dependencies:   mbed-rtos mbed

Fork of rtos_basic by mbed official

main.cpp

Committer:
pierreblouet
Date:
2018-11-11
Revision:
16:b4d5eb2ee378
Parent:
15:e263f8c52b9f

File content as of revision 16:b4d5eb2ee378:

#include "mbed.h"
#include "rtos.h"

//pierre was here 

DigitalOut nordSudR(p29);
DigitalOut nordSudJ(p27);
DigitalOut nordSudV(p25);
DigitalOut estOuestR(p12);
DigitalOut estOuestJ(p14);
DigitalOut estOuestV(p16);
DigitalIn boutonPlusNS(p22);
DigitalIn boutonMoinsNS(p21);
DigitalIn boutonPlusEO(p19);
DigitalIn boutonMoinsEO(p20);
Thread t_eo;
Thread t_ns;
Thread t_gestion;
Thread t_nbVoiture;

int nombreDeVoitureNS = 0;
int nombreDeVoitureEO = 0;

Mutex dPassage;
bool bns, beo;


/*void sequenceLumiere(DigitalOut lumiere) {
    lumiere = 1;
    Thread::wait(4000);
    lumiere = 0;
    Thread::wait(500);
    lumiere = 1;
    Thread::wait(500);
    lumiere = 0;
    Thread::wait(500);
    lumiere = 1;
    Thread::wait(500);
    lumiere = 0;
    Thread::wait(500);
    lumiere = 1;
    Thread::wait(500);
    lumiere = 0;
    Thread::wait(500);
    lumiere = 1;
    Thread::wait(500);
    lumiere=0;
    Thread::wait(2000);
}*/

void ns() {
    while(1)
    {
        if(!beo){
            //Thread::signal_wait(0x1);
            dPassage.lock();
            nordSudR=0;
            nordSudV=1;
            Thread::wait(5000);
            //while(bns){}
            if(!bns){
                printf("\r\n YO1 \r\n");
                nordSudV=0;
                nordSudJ=1;
                Thread::wait(2000);
                nordSudJ=0;
                nordSudR=1;
                Thread::wait(1000);
            }
            dPassage.unlock();
        }
        
    }
}

void eo() {
    while(1)
    {
        if(!bns){
            //Thread::signal_wait(0x1);
            dPassage.lock();
            estOuestR=0;
            estOuestV=1;
            Thread::wait(5000);
            //while(beo){}
            if(!beo){
                printf("\r\n YO2 \r\n");
                estOuestV=0;
                estOuestJ=1;
                Thread::wait(2000);
                estOuestJ=0;
                estOuestR=1;
                Thread::wait(1000); 
            }
            dPassage.unlock();
        }   
    }
}

void nbVoiture() {
    while(1) {
        if(boutonPlusNS){
            nombreDeVoitureNS++;  
        }
        if(boutonMoinsNS && nombreDeVoitureNS>0){
            nombreDeVoitureNS--;  
        }
        if(boutonPlusEO){
            nombreDeVoitureEO++;  
        }
        if(boutonMoinsEO && nombreDeVoitureEO>0){
            nombreDeVoitureEO--;  
        }
        printf("Nombre de voiture NS : %d \r\n", nombreDeVoitureNS);
        printf("Nombre de voiture EO : %d \r\n\n", nombreDeVoitureEO);
        printf("bnf: %d,     beo: %d \r\n",bns,beo);
    }
}

void gestion() {
    int max, min;
    while(1) {       
        if((nombreDeVoitureNS>(nombreDeVoitureEO+10))
            || (nombreDeVoitureEO ==0)){
            bns=1;
            beo=0;
        }
        else if((nombreDeVoitureEO>(nombreDeVoitureNS+10))
            || (nombreDeVoitureEO ==0)){
            bns=0;
            beo=1;
        }
        else {
            bns=0;
            beo=0;
            t_ns.signal_set(0x1);
            t_eo.signal_set(0x1);
        }
    }
}

int main() {
    nordSudR = 1;
    estOuestR = 1;
    nordSudJ = 0;
    estOuestJ = 0;
    nordSudV = 0;
    estOuestV = 0;
    t_eo.start(eo);
    t_ns.start(ns);
    t_gestion.start(gestion);
    t_nbVoiture.start(nbVoiture);
    while(1) {
        
    }
}