Gestion du Traffic Adaptatif- Code du mbed coordinateur
Dependencies: XBeeLib mbed mbed-rtos EthernetInterface
Diff: main.cpp
- Revision:
- 31:7ca80c48a6d7
- Parent:
- 30:f8df12b28719
--- 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