Gestion du Traffic Adaptatif- Code du mbed coordinateur

Dependencies:   XBeeLib mbed mbed-rtos EthernetInterface

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