Gestion du Trafic Adaptatif - Code des mbed récepteurs
Dependencies: XBeeLib mbed mbed-rtos
Diff: main.cpp
- Revision:
- 12:9ec78b07c688
- Parent:
- 11:0309bef74ba8
- Child:
- 13:af1b80df064c
--- a/main.cpp Wed Feb 15 14:04:02 2017 -0600 +++ b/main.cpp Tue Oct 30 20:34:01 2018 +0000 @@ -1,22 +1,151 @@ #include "mbed.h" #include "rtos.h" - -DigitalOut led1(LED1); -DigitalOut led2(LED2); -Thread thread; - -void led2_thread() { - while (true) { - led2 = !led2; - Thread::wait(1000); + +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(); + } + } } - -int main() { - thread.start(led2_thread); - - while (true) { - led1 = !led1; - Thread::wait(500); + +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() { + while(1) { + if(nombreDeVoitureNS>(nombreDeVoitureEO+10)) { + bns=1; + beo=0; + } + else if(nombreDeVoitureEO>(nombreDeVoitureNS+10)) { + 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) { + + } +} \ No newline at end of file