Gestion du Traffic Adaptatif- Code du mbed coordinateur

Dependencies:   XBeeLib mbed mbed-rtos EthernetInterface

Revision:
24:bbde0b873a37
Parent:
23:2a6ea31d8e23
Child:
25:fdb28df21d44
--- a/main.cpp	Thu Nov 22 21:52:51 2018 +0000
+++ b/main.cpp	Thu Nov 29 15:31:43 2018 +0000
@@ -12,9 +12,11 @@
 #define REMOTE_NODE_ADDR64_MSB  ((uint32_t)0x0013A200)
 
 //#error "Replace next define with the LSB of the remote module's 64-bit address (SL parameter)"
-#define REMOTE_NODE_ADDR64_LSB  ((uint32_t)0x40C0E3A1)
+#define REMOTE_NODE_ADDR64_LSB1  ((uint32_t)0x40C0E3A1) // adresse du recepteur 1
+#define REMOTE_NODE_ADDR64_LSB2  ((uint32_t)0x4086DA0E) // adresse du recepteur 2
 
-#define REMOTE_NODE_ADDR64      UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB)
+#define REMOTE_NODE_ADDR64_1      UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB1)
+#define REMOTE_NODE_ADDR64_2      UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB2)
 
 using namespace XBeeLib;
 
@@ -30,6 +32,7 @@
 
 //Nombre de voitures au feu
 int voituresFeu1 = 0;
+int voituresFeu2 = 0;
 DigitalIn boutonPlus(p24);
 DigitalIn boutonMoins(p23);
 Thread t_nbVoiture;
@@ -40,30 +43,79 @@
 
 Serial *log_serial;
 XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600);
-const RemoteXBeeZB remoteDevice = RemoteXBeeZB(REMOTE_NODE_ADDR64);
+const RemoteXBeeZB remoteDevice1 = RemoteXBeeZB(REMOTE_NODE_ADDR64_1);
+const RemoteXBeeZB remoteDevice2 = RemoteXBeeZB(REMOTE_NODE_ADDR64_2);
+
+
+static void send_explicit_data_to_remote_node(XBeeZB& xbee, const RemoteXBeeZB& RemoteDevice,int message)
+{
+    const uint8_t dstEP = 0xE8;
+    const uint8_t srcEP = 0xE8;
+    const uint16_t clusterID = 0x0011;
+    const uint16_t profileID = 0xC105;
+
+    char data1[]="r"; // demande a un recepteur de passer au rouge
+    char data2[]="v"; // demande a un recepteur de passer au vert 
+    char data3[]="e";
+    if (message ==0){
+        const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data1, strlen(data1)); 
+    }
+    else if (message ==1){
+        const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data2, strlen(data2)); 
+    }
+    else {
+        const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data3, strlen(data3));
+    }
+}
 
 /** Callback function, invoked at packet reception */
 static void receive_cb(const RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len)
 {
     const uint64_t remote_addr64 = remote.get_addr64();
-    log_serial->printf("\r\nGot a %s RX packet [%08x:%08x|%04x], len %d\r\nData: ", broadcast ? "BROADCAST" : "UNICAST", UINT64_HI32(remote_addr64), UINT64_LO32(remote_addr64), remote.get_addr16(), len);
-
+    //log_serial->printf("\r\nGot a %s RX packet [%08x:%08x|%04x], len %d\r\nData: ", broadcast ? "BROADCAST" : "UNICAST", UINT64_HI32(remote_addr64), UINT64_LO32(remote_addr64), remote.get_addr16(), len);
+    //log_serial->printf("\r\nAdresse 1: [%08x] ----- Adresse 2 : [%08x]\r\n", UINT64_LO32(remote_addr64), UINT64_LO32(REMOTE_NODE_ADDR64_LSB1));
     /*for (int i = 0; i < len; i++)
         log_serial->printf("%02x ", data[i]);*/
         
-    if (data[0]==0x6D && voituresFeu1!=0){
-        voituresFeu1--;
-        printf("Nombre de voitures : %d",voituresFeu1);
+    if (data[0]==0x6D){
+        // baisse le compteur de voiture au feu 1
+        if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1) && (voituresFeu1!=0)){
+            voituresFeu1--; 
+        }
+        // baisse le compteur de voiture au feu 2
+        else if ( (UINT64_LO32(remote_addr64)==UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)) && (voituresFeu2!=0)){
+            voituresFeu2--;
+        }
+        log_serial->printf("Nombre de voitures feu 1 : %d",voituresFeu1);
+        log_serial->printf("Nombre de voitures feu 2 : %d",voituresFeu2);
     }
     else if (data[0]==0x70){
-        voituresFeu1++;
-        printf("Nombre de voitures : %d",voituresFeu1);
+        // augmente le compteur de voiture au feu 1
+        if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1)){
+            voituresFeu1++; 
+        }
+        // augmente le compteur de voiture au feu 2
+        else if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)){
+            voituresFeu2++;
+        }
+        log_serial->printf("Nombre de voitures feu 1 : %d",voituresFeu1);
+        log_serial->printf("Nombre de voitures feu 2 : %d",voituresFeu2);
     }
     else if (data[0]==0x72){
-        feu_rouge = 0;
-        feu_orange = 0;
-        feu_vert = 1;    
+        // demande au r2 de passer au vert
+        if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1)){
+            log_serial->printf("r2 passe au vert");
+            send_explicit_data_to_remote_node(xbee, remoteDevice2,0); 
+        }
+        // demande au r1 de passer au vert
+        else if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)){
+            log_serial->printf("r1 passe au vert");
+            send_explicit_data_to_remote_node(xbee, remoteDevice1,0);
+        }
     }
+    /*else if (data[0]==0x73){
+        send_explicit_data_to_remote_node(xbee, remoteDevice1,0);
+    }*/
 
     log_serial->printf("\r\n");
 }
@@ -80,26 +132,6 @@
     }
 }*/
 
-static void send_explicit_data_to_remote_node(XBeeZB& xbee, const RemoteXBeeZB& RemoteDevice,int message)
-{
-    const uint8_t dstEP = 0xE8;
-    const uint8_t srcEP = 0xE8;
-    const uint16_t clusterID = 0x0011;
-    const uint16_t profileID = 0xC105;
-
-    char data1[]="r";
-    char data2[]="v";
-    char data3[]="e";
-    if (message ==0){
-        const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data1, strlen(data1)); 
-    }
-    else if (message ==1){
-        const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data2, strlen(data2)); 
-    }
-    else {
-        const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data3, strlen(data3));
-    }
-}
 
 void connect_Xbee()
 {
@@ -137,7 +169,7 @@
       Thread::wait(2000);
       feu_orange = 0;
       feu_rouge = 1;
-      send_explicit_data_to_remote_node(xbee, remoteDevice,0);
+      send_explicit_data_to_remote_node(xbee, remoteDevice1,0);
    }
 }
 
@@ -148,10 +180,10 @@
     {
         Thread::wait(100);
         if(i==40){
-            t_feuRouge.signal_set(0x1);
+            send_explicit_data_to_remote_node(xbee, remoteDevice2,1);
         }
         if(i==80){
-            send_explicit_data_to_remote_node(xbee, remoteDevice,1);
+            send_explicit_data_to_remote_node(xbee, remoteDevice1,1);
             i=0;
         }
         i++;