Gestion du Traffic Adaptatif- Code du mbed coordinateur

Dependencies:   XBeeLib mbed mbed-rtos EthernetInterface

Committer:
leomerel
Date:
Sun Nov 18 21:15:36 2018 +0000
Revision:
22:c3b22291cb9d
Parent:
21:5adfcfd83e95
Child:
23:2a6ea31d8e23
V2.0; Le r?cepteur envoi un message au coordinateur d?s qu'il y a une voiture en plus ou en moins au feu. Le coordinateur traite ces donn?es et sait donc combien de voitures attendent au feu.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leomerel 21:5adfcfd83e95 1 //SQLUT
pierreblouet 16:b4d5eb2ee378 2
pierreblouet 17:0694b399bd0d 3 #include "mbed.h"
pierreblouet 17:0694b399bd0d 4 #include "XBeeLib.h"
leomerel 21:5adfcfd83e95 5 #include "rtos.h"
pierreblouet 17:0694b399bd0d 6 #if defined(ENABLE_LOGGING)
pierreblouet 17:0694b399bd0d 7 #include "DigiLoggerMbedSerial.h"
pierreblouet 17:0694b399bd0d 8 using namespace DigiLog;
pierreblouet 17:0694b399bd0d 9 #endif
leomerel 12:9ec78b07c688 10
leomerel 12:9ec78b07c688 11
pierreblouet 17:0694b399bd0d 12 #define REMOTE_NODE_ADDR64_MSB ((uint32_t)0x0013A200)
pierreblouet 17:0694b399bd0d 13
pierreblouet 17:0694b399bd0d 14 //#error "Replace next define with the LSB of the remote module's 64-bit address (SL parameter)"
pierreblouet 17:0694b399bd0d 15 #define REMOTE_NODE_ADDR64_LSB ((uint32_t)0x40C0E3A1)
pierreblouet 17:0694b399bd0d 16
pierreblouet 17:0694b399bd0d 17 #define REMOTE_NODE_ADDR64 UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB)
pierreblouet 17:0694b399bd0d 18
pierreblouet 17:0694b399bd0d 19 using namespace XBeeLib;
pierreblouet 17:0694b399bd0d 20
pierreblouet 17:0694b399bd0d 21 //feux gauche
pierreblouet 17:0694b399bd0d 22 //rouge
pierreblouet 20:2a94c9200119 23 DigitalOut feux_gauche_rouge(p12);
pierreblouet 17:0694b399bd0d 24 //orange
pierreblouet 20:2a94c9200119 25 DigitalOut feux_gauche_orange(p14);
pierreblouet 17:0694b399bd0d 26 //vert
pierreblouet 20:2a94c9200119 27 DigitalOut feux_gauche_vert(p16);
leomerel 12:9ec78b07c688 28
leomerel 22:c3b22291cb9d 29 DigitalOut led1(LED1);
leomerel 22:c3b22291cb9d 30
leomerel 21:5adfcfd83e95 31 //Nombre de voitures au feu
leomerel 22:c3b22291cb9d 32 int voituresFeu1 = 0;
leomerel 21:5adfcfd83e95 33 DigitalIn boutonPlus(p24);
leomerel 21:5adfcfd83e95 34 DigitalIn boutonMoins(p23);
leomerel 21:5adfcfd83e95 35 Thread t_nbVoiture;
leomerel 21:5adfcfd83e95 36
leomerel 21:5adfcfd83e95 37 Thread t_receive;
leomerel 21:5adfcfd83e95 38
pierreblouet 17:0694b399bd0d 39 //liste des message a envoyer rouge et vert seulement pour le coordinateur
pierreblouet 17:0694b399bd0d 40 //////////////////////////
pierreblouet 17:0694b399bd0d 41 /////
pierreblouet 18:972fb2937e41 42 char rouge[] = "r";
pierreblouet 18:972fb2937e41 43 char vert[] = "v";
pierreblouet 17:0694b399bd0d 44 /////
pierreblouet 17:0694b399bd0d 45 uint8_t ok = 0x02;
pierreblouet 17:0694b399bd0d 46 //////////////////////////
pierreblouet 17:0694b399bd0d 47
pierreblouet 17:0694b399bd0d 48
pierreblouet 17:0694b399bd0d 49 Serial *log_serial;
pierreblouet 17:0694b399bd0d 50
pierreblouet 17:0694b399bd0d 51 /** Callback function, invoked at packet reception */
pierreblouet 17:0694b399bd0d 52 static void receive_cb(const RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len)
pierreblouet 17:0694b399bd0d 53 {
pierreblouet 17:0694b399bd0d 54 const uint64_t remote_addr64 = remote.get_addr64();
pierreblouet 17:0694b399bd0d 55
pierreblouet 17:0694b399bd0d 56 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);
pierreblouet 17:0694b399bd0d 57
pierreblouet 20:2a94c9200119 58 /*for (int i = 0; i < len; i++)
pierreblouet 20:2a94c9200119 59 log_serial->printf("%02x ", data[i]);*/
leomerel 22:c3b22291cb9d 60
leomerel 22:c3b22291cb9d 61 if (data[0]==0x6D && voituresFeu1!=0){
leomerel 22:c3b22291cb9d 62 voituresFeu1--;
leomerel 22:c3b22291cb9d 63 printf("Nombre de voitures : %d",voituresFeu1);
leomerel 22:c3b22291cb9d 64 }
leomerel 22:c3b22291cb9d 65 if (data[0]==0x70){
leomerel 22:c3b22291cb9d 66 voituresFeu1++;
leomerel 22:c3b22291cb9d 67 printf("Nombre de voitures : %d",voituresFeu1);
leomerel 22:c3b22291cb9d 68 }
pierreblouet 17:0694b399bd0d 69
pierreblouet 17:0694b399bd0d 70 log_serial->printf("\r\n");
emilmont 1:491820ee784d 71 }
leomerel 12:9ec78b07c688 72
leomerel 22:c3b22291cb9d 73 /*void nbVoiture() {
leomerel 21:5adfcfd83e95 74 while(1) {
leomerel 21:5adfcfd83e95 75 if(boutonPlus){
leomerel 21:5adfcfd83e95 76 nombreDeVoiture++;
leomerel 21:5adfcfd83e95 77 }
leomerel 21:5adfcfd83e95 78 if(boutonMoins && nombreDeVoiture>0){
leomerel 21:5adfcfd83e95 79 nombreDeVoiture--;
leomerel 21:5adfcfd83e95 80 }
leomerel 21:5adfcfd83e95 81 printf("Nombre de voitures : %d \r\n", nombreDeVoiture);
leomerel 21:5adfcfd83e95 82 }
leomerel 22:c3b22291cb9d 83 }*/
pierreblouet 17:0694b399bd0d 84
leomerel 22:c3b22291cb9d 85 static void send_explicit_data_to_remote_node(XBeeZB& xbee, const RemoteXBeeZB& RemoteDevice,int message){
pierreblouet 18:972fb2937e41 86
pierreblouet 18:972fb2937e41 87 //const uint8_t data_len = strlen(data);
pierreblouet 17:0694b399bd0d 88 const uint8_t dstEP = 0xE8;
pierreblouet 17:0694b399bd0d 89 const uint8_t srcEP = 0xE8;
pierreblouet 17:0694b399bd0d 90 const uint16_t clusterID = 0x0011;
pierreblouet 17:0694b399bd0d 91 const uint16_t profileID = 0xC105;
pierreblouet 17:0694b399bd0d 92
pierreblouet 18:972fb2937e41 93 char data1[]="r";
pierreblouet 18:972fb2937e41 94 char data2[]="v";
pierreblouet 18:972fb2937e41 95 char data3[]="e";
pierreblouet 18:972fb2937e41 96 if (message ==0){
pierreblouet 18:972fb2937e41 97 const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data1, strlen(data1));
leomerel 22:c3b22291cb9d 98 /*if (txStatus == TxStatusSuccess)
pierreblouet 18:972fb2937e41 99 log_serial->printf("send_explicit_data_to_remote_node OK\r\n");
pierreblouet 18:972fb2937e41 100 else
leomerel 22:c3b22291cb9d 101 log_serial->printf("send_explicit_data_to_remote_node failed with %d\r\n", (int) txStatus);*/
pierreblouet 18:972fb2937e41 102 }
pierreblouet 18:972fb2937e41 103 else if (message ==1){
pierreblouet 18:972fb2937e41 104 const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data2, strlen(data2));
leomerel 22:c3b22291cb9d 105 /*if (txStatus == TxStatusSuccess)
pierreblouet 18:972fb2937e41 106 log_serial->printf("send_explicit_data_to_remote_node OK\r\n");
pierreblouet 18:972fb2937e41 107 else
leomerel 22:c3b22291cb9d 108 log_serial->printf("send_explicit_data_to_remote_node failed with %d\r\n", (int) txStatus);*/
pierreblouet 18:972fb2937e41 109 }
pierreblouet 18:972fb2937e41 110 else {
pierreblouet 18:972fb2937e41 111 const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data3, strlen(data3));
leomerel 22:c3b22291cb9d 112 /*if (txStatus == TxStatusSuccess)
pierreblouet 18:972fb2937e41 113 log_serial->printf("send_explicit_data_to_remote_node OK\r\n");
pierreblouet 18:972fb2937e41 114 else
leomerel 22:c3b22291cb9d 115 log_serial->printf("send_explicit_data_to_remote_node failed with %d\r\n", (int) txStatus);*/
pierreblouet 18:972fb2937e41 116 }
leomerel 22:c3b22291cb9d 117 }
leomerel 12:9ec78b07c688 118
leomerel 22:c3b22291cb9d 119 XBeeZB connect_Xbee()
pierreblouet 17:0694b399bd0d 120 {
pierreblouet 17:0694b399bd0d 121 log_serial = new Serial(DEBUG_TX, DEBUG_RX);
pierreblouet 17:0694b399bd0d 122 log_serial->baud(9600);
pierreblouet 17:0694b399bd0d 123 log_serial->printf("Sample application to demo how to receive unicast and broadcast data with the XBeeZB\r\n\r\n");
pierreblouet 17:0694b399bd0d 124 log_serial->printf(XB_LIB_BANNER);
pierreblouet 17:0694b399bd0d 125
leomerel 22:c3b22291cb9d 126 #if defined(ENABLE_LOGGING)
pierreblouet 17:0694b399bd0d 127 new DigiLoggerMbedSerial(log_serial, LogLevelInfo);
leomerel 22:c3b22291cb9d 128 #endif
pierreblouet 17:0694b399bd0d 129
pierreblouet 17:0694b399bd0d 130 XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600);
pierreblouet 17:0694b399bd0d 131
pierreblouet 17:0694b399bd0d 132 /* Register callbacks */
pierreblouet 17:0694b399bd0d 133 xbee.register_receive_cb(&receive_cb);
pierreblouet 17:0694b399bd0d 134
pierreblouet 17:0694b399bd0d 135 RadioStatus const radioStatus = xbee.init();
pierreblouet 17:0694b399bd0d 136 MBED_ASSERT(radioStatus == Success);
leomerel 12:9ec78b07c688 137
pierreblouet 17:0694b399bd0d 138 /* Wait until the device has joined the network */
pierreblouet 17:0694b399bd0d 139 log_serial->printf("Waiting for device to join the network: ");
pierreblouet 17:0694b399bd0d 140 while (!xbee.is_joined()) {
pierreblouet 17:0694b399bd0d 141 wait_ms(1000);
pierreblouet 17:0694b399bd0d 142 log_serial->printf(".");
leomerel 12:9ec78b07c688 143 }
pierreblouet 17:0694b399bd0d 144 log_serial->printf("OK\r\n");
leomerel 22:c3b22291cb9d 145 return xbee;
leomerel 22:c3b22291cb9d 146 }
leomerel 22:c3b22291cb9d 147
leomerel 22:c3b22291cb9d 148 int main()
leomerel 22:c3b22291cb9d 149 {
leomerel 22:c3b22291cb9d 150 XBeeZB xbee = connect_Xbee();
leomerel 21:5adfcfd83e95 151
leomerel 22:c3b22291cb9d 152 //t_nbVoiture.start(nbVoiture);
leomerel 22:c3b22291cb9d 153 //t_receive.start(receive_cb);
leomerel 22:c3b22291cb9d 154 int i=0;
leomerel 21:5adfcfd83e95 155
pierreblouet 17:0694b399bd0d 156 const RemoteXBeeZB remoteDevice = RemoteXBeeZB(REMOTE_NODE_ADDR64);
pierreblouet 17:0694b399bd0d 157 while (true) {
leomerel 22:c3b22291cb9d 158 i++;
pierreblouet 17:0694b399bd0d 159 uint32_t receive_value = xbee.process_rx_frames();
pierreblouet 18:972fb2937e41 160
pierreblouet 17:0694b399bd0d 161 log_serial->printf("%d");
pierreblouet 17:0694b399bd0d 162 wait_ms(100);
pierreblouet 17:0694b399bd0d 163 log_serial->printf(".");
pierreblouet 17:0694b399bd0d 164
leomerel 12:9ec78b07c688 165
pierreblouet 17:0694b399bd0d 166 //partie gestion des feux a mettre sur le coordinateur
pierreblouet 17:0694b399bd0d 167 /////////////////////////////////////////////
leomerel 22:c3b22291cb9d 168 if(i==10){
leomerel 22:c3b22291cb9d 169 send_explicit_data_to_remote_node(xbee, remoteDevice,1);
leomerel 22:c3b22291cb9d 170 feux_gauche_rouge = 0;
leomerel 22:c3b22291cb9d 171 feux_gauche_vert = 1;
leomerel 22:c3b22291cb9d 172 }
leomerel 22:c3b22291cb9d 173 if(i==20){
leomerel 22:c3b22291cb9d 174 send_explicit_data_to_remote_node(xbee, remoteDevice,0);
leomerel 22:c3b22291cb9d 175 feux_gauche_rouge = 1;
leomerel 22:c3b22291cb9d 176 feux_gauche_vert = 0;
leomerel 22:c3b22291cb9d 177 i=0;
leomerel 22:c3b22291cb9d 178 }
pierreblouet 17:0694b399bd0d 179 ////////////////////////////////////////////
leomerel 22:c3b22291cb9d 180
leomerel 22:c3b22291cb9d 181 if(voituresFeu1 >= 10){led1=1;}
leomerel 22:c3b22291cb9d 182 else{led1=0;}
leomerel 12:9ec78b07c688 183 }
pierreblouet 17:0694b399bd0d 184
pierreblouet 17:0694b399bd0d 185 // delete(log_serial);
pierreblouet 17:0694b399bd0d 186 }