Gestion du Traffic Adaptatif- Code du mbed coordinateur

Dependencies:   XBeeLib mbed mbed-rtos EthernetInterface

Files at this revision

API Documentation at this revision

Comitter:
leomerel
Date:
Thu Dec 06 20:28:22 2018 +0000
Parent:
30:f8df12b28719
Commit message:
VF; Version finale remise avec le rapport final. Par rapport a la version precedente, on a ajoute la communication avec le rasberryPi.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r f8df12b28719 -r 7ca80c48a6d7 main.cpp
--- a/main.cpp	Wed Dec 05 16:13:36 2018 +0000
+++ b/main.cpp	Thu Dec 06 20:28:22 2018 +0000
@@ -1,3 +1,9 @@
+/*
+* GTA (Gestion du Trafic Adaptatif) Sherbrooke
+* Code à mettre dans le mbed du noeud fixe 
+* Par : Léo MEREL, Jean-Philippe BAILLARGEON, Pierre BLOUET, Alex VIGNEAULT, Mikaël LAMONTAGNE
+*/
+
 #include "mbed.h"
 #include "XBeeLib.h"
 #include "rtos.h"
@@ -28,8 +34,9 @@
 
 //Gestion
 int temps = 5000; //durée (en ms) pour qu'une voiture traverse le chantier
+int duree_cycle = 10000; // durée (en ms) du cycle d'allumage classique
 Timer timer;
-int whosred;
+int isRed;
 Thread t_setFeu1Vert;
 Thread t_setFeu2Vert;
 bool stay1=0; /* stay est une variable qui est à 1 lorsqu'on veut qu'un feu reste à une              */
@@ -56,27 +63,36 @@
 
 Mail<int,128> mail_box;
 
+// Envoyer un message au rasberryPi
 void sendMessage() {
     EthernetInterface eth;
     eth.init(); //Use DHCP
     eth.connect();
-    printf("\nClient IP Address is %s\n", eth.getIPAddress());
+    printf("\r\nClient IP Address is %s\r\n", eth.getIPAddress());
     
     // Connect to Server
     TCPSocketConnection socket;
     while (socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) {
-        printf("Unable to connect to (%s) on port (%d)\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT);
+        printf("Unable to connect to (%s) on port (%d)\r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT);
         wait(1);
     }
-    printf("Connected to Server at %s\n",ECHO_SERVER_ADDRESS);
+    printf("Connected to Server at %s\r\n",ECHO_SERVER_ADDRESS);
     int * i = 0;
-    char hello[] = "10";
+    char hello[] = "100";
     while(1) {
         osEvent evt = mail_box.get();
         if (evt.status == osEventMail) {
             i = (int*)evt.value.p;
-            sprintf(hello, "%d", i);
-            printf("Sending  message to Server : '%s' \n",hello);
+            if(*i<10){
+                sprintf(hello, "00%d\r\n", *i);
+            }
+            else if(*i<100){
+                sprintf(hello, "0%d\r\n", *i);
+            }
+            else{
+                sprintf(hello, "%d\r\n", *i);
+            }
+            printf("Sending  message to Server : '%s' \r\n",hello);
             socket.send_all(hello, sizeof(hello) - 1);
             mail_box.free(i);
         }
@@ -85,6 +101,7 @@
     
 }
 
+// Envoyer un message à un autre mbed, via un xbee d'adresse connue
 static void send_explicit_data_to_remote_node(XBeeZB& xbee, const RemoteXBeeZB& RemoteDevice,const char * data)
 {
     const uint8_t dstEP = 0xE8;
@@ -112,7 +129,8 @@
         log_serial->printf("Nombre de voitures feu 1 : %d\r\n",voituresFeu1);
         log_serial->printf("Nombre de voitures feu 2 : %d\r\n",voituresFeu2);
         int *a = mail_box.alloc();
-        a = voituresFeu1+voituresFeu2;
+        *a = voituresFeu1+voituresFeu2;
+        log_serial->printf("Voiture total : %d\r\n",*a);
         mail_box.put(a);
     }
     else if (data[0]==0x70){
@@ -127,21 +145,22 @@
         log_serial->printf("Nombre de voitures feu 1 : %d\r\n",voituresFeu1);
         log_serial->printf("Nombre de voitures feu 2 : %d\r\n",voituresFeu2);
         int *a = mail_box.alloc();
-        a = voituresFeu1+voituresFeu2;
+        *a = voituresFeu1+voituresFeu2;
+        log_serial->printf("Voiture total : %d\r\n",*a);
         mail_box.put(a);
     }
     else if (data[0]==0x72){
         // confirmation que r1 est bien rouge, donc peut demander au r2 de passer au vert
         if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1)){
             if(vehicule_urgence==0){
-                whosred = 1;
+                isRed = 1;
                 t_setFeu2Vert.signal_set(0x1);
             }
         }
         // confirmation que r2 est bien rouge, donc peut demander au r1 de passer au vert
         else if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)){
             if(vehicule_urgence==0){
-                whosred = 2;
+                isRed = 2;
                 t_setFeu1Vert.signal_set(0x1);
             }
         }
@@ -155,7 +174,7 @@
         Thread::wait(temps);
         if(vehicule_urgence==0){
             send_explicit_data_to_remote_node(xbee, remoteDevice1,set_vert);
-            log_serial->printf("r1 passe au vert"); 
+            log_serial->printf("r1 passe au vert\r\n"); 
         }
     }
 }
@@ -167,10 +186,11 @@
         if(vehicule_urgence==0){
             send_explicit_data_to_remote_node(xbee, remoteDevice2,set_vert);  
         }
-        log_serial->printf("r2 passe au vert");
+        log_serial->printf("r2 passe au vert\r\n");
     }
 }
 
+// Connection faite au démarrage du programme lorsqu'on reset le mbed
 void connect_Xbee()
 {
     log_serial = new Serial(DEBUG_TX, DEBUG_RX);
@@ -193,7 +213,7 @@
         log_serial->printf(".");
     }
     log_serial->printf("Connection reussie.\r\n");
-    whosred=1;
+    isRed=1;
 }
 
 void gestion()
@@ -222,13 +242,13 @@
         else{
             stay1=0;
             stay2=0;
-            if(whosred==1){
+            if(isRed==1){
                 send_explicit_data_to_remote_node(xbee, remoteDevice2,set_rouge);
             }
-            else if(whosred==2){
+            else if(isRed==2){
                 send_explicit_data_to_remote_node(xbee, remoteDevice1,set_rouge);
             }
-            Thread::wait(10000);
+            Thread::wait(duree_cycle);
         }
     }
 }
@@ -237,9 +257,6 @@
     led3 = !led3;
     t_urgence.signal_set(0x1);
 }
-void fall() {
-    led2 = !led2;
-}
 
 void blink(){
     while(1){
@@ -266,9 +283,7 @@
     }
 }
 
-int main()
-{
-    
+int main(){
     led2=0;
     led3=0;
     led4=0;
@@ -282,7 +297,6 @@
     t_Ethernet.start(sendMessage);
     
     button.rise(&rise);  // attach the address of the flip function to the rising edge
-    button.fall(&fall);
     
     while (true) {        
         uint32_t receive_value = xbee.process_rx_frames();//nécessaire pour lire (constamment) la valeur recue