Gestion du Traffic Adaptatif- Code du mbed coordinateur

Dependencies:   XBeeLib mbed mbed-rtos EthernetInterface

Committer:
leomerel
Date:
Thu Nov 29 15:31:43 2018 +0000
Revision:
24:bbde0b873a37
Parent:
23:2a6ea31d8e23
Child:
25:fdb28df21d44
V3.0; Le C gere les 2 R. Il n'y a pas de feu connecte sur le C, mais c'est le C qui envoie les commande "set rouge" ou "set vert" aux R. Avant d'envoyer "set vert" a un R, le C attend de recevoir un message du 2e R assurant que celui-ci est bien rouge

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)"
leomerel 24:bbde0b873a37 15 #define REMOTE_NODE_ADDR64_LSB1 ((uint32_t)0x40C0E3A1) // adresse du recepteur 1
leomerel 24:bbde0b873a37 16 #define REMOTE_NODE_ADDR64_LSB2 ((uint32_t)0x4086DA0E) // adresse du recepteur 2
pierreblouet 17:0694b399bd0d 17
leomerel 24:bbde0b873a37 18 #define REMOTE_NODE_ADDR64_1 UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB1)
leomerel 24:bbde0b873a37 19 #define REMOTE_NODE_ADDR64_2 UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB2)
pierreblouet 17:0694b399bd0d 20
pierreblouet 17:0694b399bd0d 21 using namespace XBeeLib;
pierreblouet 17:0694b399bd0d 22
pierreblouet 17:0694b399bd0d 23 //feux gauche
pierreblouet 17:0694b399bd0d 24 //rouge
leomerel 23:2a6ea31d8e23 25 DigitalOut feu_rouge(p12);
pierreblouet 17:0694b399bd0d 26 //orange
leomerel 23:2a6ea31d8e23 27 DigitalOut feu_orange(p14);
pierreblouet 17:0694b399bd0d 28 //vert
leomerel 23:2a6ea31d8e23 29 DigitalOut feu_vert(p16);
leomerel 12:9ec78b07c688 30
leomerel 22:c3b22291cb9d 31 DigitalOut led1(LED1);
leomerel 22:c3b22291cb9d 32
leomerel 21:5adfcfd83e95 33 //Nombre de voitures au feu
leomerel 22:c3b22291cb9d 34 int voituresFeu1 = 0;
leomerel 24:bbde0b873a37 35 int voituresFeu2 = 0;
leomerel 21:5adfcfd83e95 36 DigitalIn boutonPlus(p24);
leomerel 21:5adfcfd83e95 37 DigitalIn boutonMoins(p23);
leomerel 21:5adfcfd83e95 38 Thread t_nbVoiture;
leomerel 21:5adfcfd83e95 39
leomerel 23:2a6ea31d8e23 40 //Thread t_receive;
leomerel 23:2a6ea31d8e23 41 Thread t_feuRouge;
leomerel 23:2a6ea31d8e23 42 Thread t_gestion;
pierreblouet 17:0694b399bd0d 43
pierreblouet 17:0694b399bd0d 44 Serial *log_serial;
leomerel 23:2a6ea31d8e23 45 XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600);
leomerel 24:bbde0b873a37 46 const RemoteXBeeZB remoteDevice1 = RemoteXBeeZB(REMOTE_NODE_ADDR64_1);
leomerel 24:bbde0b873a37 47 const RemoteXBeeZB remoteDevice2 = RemoteXBeeZB(REMOTE_NODE_ADDR64_2);
leomerel 24:bbde0b873a37 48
leomerel 24:bbde0b873a37 49
leomerel 24:bbde0b873a37 50 static void send_explicit_data_to_remote_node(XBeeZB& xbee, const RemoteXBeeZB& RemoteDevice,int message)
leomerel 24:bbde0b873a37 51 {
leomerel 24:bbde0b873a37 52 const uint8_t dstEP = 0xE8;
leomerel 24:bbde0b873a37 53 const uint8_t srcEP = 0xE8;
leomerel 24:bbde0b873a37 54 const uint16_t clusterID = 0x0011;
leomerel 24:bbde0b873a37 55 const uint16_t profileID = 0xC105;
leomerel 24:bbde0b873a37 56
leomerel 24:bbde0b873a37 57 char data1[]="r"; // demande a un recepteur de passer au rouge
leomerel 24:bbde0b873a37 58 char data2[]="v"; // demande a un recepteur de passer au vert
leomerel 24:bbde0b873a37 59 char data3[]="e";
leomerel 24:bbde0b873a37 60 if (message ==0){
leomerel 24:bbde0b873a37 61 const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data1, strlen(data1));
leomerel 24:bbde0b873a37 62 }
leomerel 24:bbde0b873a37 63 else if (message ==1){
leomerel 24:bbde0b873a37 64 const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data2, strlen(data2));
leomerel 24:bbde0b873a37 65 }
leomerel 24:bbde0b873a37 66 else {
leomerel 24:bbde0b873a37 67 const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data3, strlen(data3));
leomerel 24:bbde0b873a37 68 }
leomerel 24:bbde0b873a37 69 }
pierreblouet 17:0694b399bd0d 70
pierreblouet 17:0694b399bd0d 71 /** Callback function, invoked at packet reception */
pierreblouet 17:0694b399bd0d 72 static void receive_cb(const RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len)
pierreblouet 17:0694b399bd0d 73 {
pierreblouet 17:0694b399bd0d 74 const uint64_t remote_addr64 = remote.get_addr64();
leomerel 24:bbde0b873a37 75 //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);
leomerel 24:bbde0b873a37 76 //log_serial->printf("\r\nAdresse 1: [%08x] ----- Adresse 2 : [%08x]\r\n", UINT64_LO32(remote_addr64), UINT64_LO32(REMOTE_NODE_ADDR64_LSB1));
pierreblouet 20:2a94c9200119 77 /*for (int i = 0; i < len; i++)
pierreblouet 20:2a94c9200119 78 log_serial->printf("%02x ", data[i]);*/
leomerel 22:c3b22291cb9d 79
leomerel 24:bbde0b873a37 80 if (data[0]==0x6D){
leomerel 24:bbde0b873a37 81 // baisse le compteur de voiture au feu 1
leomerel 24:bbde0b873a37 82 if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1) && (voituresFeu1!=0)){
leomerel 24:bbde0b873a37 83 voituresFeu1--;
leomerel 24:bbde0b873a37 84 }
leomerel 24:bbde0b873a37 85 // baisse le compteur de voiture au feu 2
leomerel 24:bbde0b873a37 86 else if ( (UINT64_LO32(remote_addr64)==UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)) && (voituresFeu2!=0)){
leomerel 24:bbde0b873a37 87 voituresFeu2--;
leomerel 24:bbde0b873a37 88 }
leomerel 24:bbde0b873a37 89 log_serial->printf("Nombre de voitures feu 1 : %d",voituresFeu1);
leomerel 24:bbde0b873a37 90 log_serial->printf("Nombre de voitures feu 2 : %d",voituresFeu2);
leomerel 22:c3b22291cb9d 91 }
leomerel 23:2a6ea31d8e23 92 else if (data[0]==0x70){
leomerel 24:bbde0b873a37 93 // augmente le compteur de voiture au feu 1
leomerel 24:bbde0b873a37 94 if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1)){
leomerel 24:bbde0b873a37 95 voituresFeu1++;
leomerel 24:bbde0b873a37 96 }
leomerel 24:bbde0b873a37 97 // augmente le compteur de voiture au feu 2
leomerel 24:bbde0b873a37 98 else if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)){
leomerel 24:bbde0b873a37 99 voituresFeu2++;
leomerel 24:bbde0b873a37 100 }
leomerel 24:bbde0b873a37 101 log_serial->printf("Nombre de voitures feu 1 : %d",voituresFeu1);
leomerel 24:bbde0b873a37 102 log_serial->printf("Nombre de voitures feu 2 : %d",voituresFeu2);
leomerel 22:c3b22291cb9d 103 }
leomerel 23:2a6ea31d8e23 104 else if (data[0]==0x72){
leomerel 24:bbde0b873a37 105 // demande au r2 de passer au vert
leomerel 24:bbde0b873a37 106 if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1)){
leomerel 24:bbde0b873a37 107 log_serial->printf("r2 passe au vert");
leomerel 24:bbde0b873a37 108 send_explicit_data_to_remote_node(xbee, remoteDevice2,0);
leomerel 24:bbde0b873a37 109 }
leomerel 24:bbde0b873a37 110 // demande au r1 de passer au vert
leomerel 24:bbde0b873a37 111 else if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)){
leomerel 24:bbde0b873a37 112 log_serial->printf("r1 passe au vert");
leomerel 24:bbde0b873a37 113 send_explicit_data_to_remote_node(xbee, remoteDevice1,0);
leomerel 24:bbde0b873a37 114 }
leomerel 23:2a6ea31d8e23 115 }
leomerel 24:bbde0b873a37 116 /*else if (data[0]==0x73){
leomerel 24:bbde0b873a37 117 send_explicit_data_to_remote_node(xbee, remoteDevice1,0);
leomerel 24:bbde0b873a37 118 }*/
pierreblouet 17:0694b399bd0d 119
pierreblouet 17:0694b399bd0d 120 log_serial->printf("\r\n");
emilmont 1:491820ee784d 121 }
leomerel 12:9ec78b07c688 122
leomerel 22:c3b22291cb9d 123 /*void nbVoiture() {
leomerel 21:5adfcfd83e95 124 while(1) {
leomerel 21:5adfcfd83e95 125 if(boutonPlus){
leomerel 21:5adfcfd83e95 126 nombreDeVoiture++;
leomerel 21:5adfcfd83e95 127 }
leomerel 21:5adfcfd83e95 128 if(boutonMoins && nombreDeVoiture>0){
leomerel 21:5adfcfd83e95 129 nombreDeVoiture--;
leomerel 21:5adfcfd83e95 130 }
leomerel 21:5adfcfd83e95 131 printf("Nombre de voitures : %d \r\n", nombreDeVoiture);
leomerel 21:5adfcfd83e95 132 }
leomerel 22:c3b22291cb9d 133 }*/
pierreblouet 17:0694b399bd0d 134
leomerel 12:9ec78b07c688 135
leomerel 23:2a6ea31d8e23 136 void connect_Xbee()
pierreblouet 17:0694b399bd0d 137 {
pierreblouet 17:0694b399bd0d 138 log_serial = new Serial(DEBUG_TX, DEBUG_RX);
pierreblouet 17:0694b399bd0d 139 log_serial->baud(9600);
pierreblouet 17:0694b399bd0d 140 log_serial->printf("Sample application to demo how to receive unicast and broadcast data with the XBeeZB\r\n\r\n");
pierreblouet 17:0694b399bd0d 141 log_serial->printf(XB_LIB_BANNER);
pierreblouet 17:0694b399bd0d 142
leomerel 22:c3b22291cb9d 143 #if defined(ENABLE_LOGGING)
pierreblouet 17:0694b399bd0d 144 new DigiLoggerMbedSerial(log_serial, LogLevelInfo);
leomerel 22:c3b22291cb9d 145 #endif
pierreblouet 17:0694b399bd0d 146
pierreblouet 17:0694b399bd0d 147 /* Register callbacks */
pierreblouet 17:0694b399bd0d 148 xbee.register_receive_cb(&receive_cb);
pierreblouet 17:0694b399bd0d 149
pierreblouet 17:0694b399bd0d 150 RadioStatus const radioStatus = xbee.init();
pierreblouet 17:0694b399bd0d 151 MBED_ASSERT(radioStatus == Success);
leomerel 12:9ec78b07c688 152
pierreblouet 17:0694b399bd0d 153 /* Wait until the device has joined the network */
pierreblouet 17:0694b399bd0d 154 log_serial->printf("Waiting for device to join the network: ");
pierreblouet 17:0694b399bd0d 155 while (!xbee.is_joined()) {
pierreblouet 17:0694b399bd0d 156 wait_ms(1000);
pierreblouet 17:0694b399bd0d 157 log_serial->printf(".");
leomerel 12:9ec78b07c688 158 }
pierreblouet 17:0694b399bd0d 159 log_serial->printf("OK\r\n");
leomerel 23:2a6ea31d8e23 160 }
leomerel 23:2a6ea31d8e23 161
leomerel 23:2a6ea31d8e23 162 void set_feuRouge()
leomerel 23:2a6ea31d8e23 163 {
leomerel 23:2a6ea31d8e23 164 while(1)
leomerel 23:2a6ea31d8e23 165 {
leomerel 23:2a6ea31d8e23 166 Thread::signal_wait(0x1);
leomerel 23:2a6ea31d8e23 167 feu_vert = 0;
leomerel 23:2a6ea31d8e23 168 feu_orange = 1;
leomerel 23:2a6ea31d8e23 169 Thread::wait(2000);
leomerel 23:2a6ea31d8e23 170 feu_orange = 0;
leomerel 23:2a6ea31d8e23 171 feu_rouge = 1;
leomerel 24:bbde0b873a37 172 send_explicit_data_to_remote_node(xbee, remoteDevice1,0);
leomerel 23:2a6ea31d8e23 173 }
leomerel 23:2a6ea31d8e23 174 }
leomerel 23:2a6ea31d8e23 175
leomerel 23:2a6ea31d8e23 176 void gestion()
leomerel 23:2a6ea31d8e23 177 {
leomerel 23:2a6ea31d8e23 178 int i=0;
leomerel 23:2a6ea31d8e23 179 while(1)
leomerel 23:2a6ea31d8e23 180 {
leomerel 23:2a6ea31d8e23 181 Thread::wait(100);
leomerel 23:2a6ea31d8e23 182 if(i==40){
leomerel 24:bbde0b873a37 183 send_explicit_data_to_remote_node(xbee, remoteDevice2,1);
leomerel 23:2a6ea31d8e23 184 }
leomerel 23:2a6ea31d8e23 185 if(i==80){
leomerel 24:bbde0b873a37 186 send_explicit_data_to_remote_node(xbee, remoteDevice1,1);
leomerel 23:2a6ea31d8e23 187 i=0;
leomerel 23:2a6ea31d8e23 188 }
leomerel 23:2a6ea31d8e23 189 i++;
leomerel 23:2a6ea31d8e23 190 }
leomerel 22:c3b22291cb9d 191 }
leomerel 22:c3b22291cb9d 192
leomerel 22:c3b22291cb9d 193 int main()
leomerel 22:c3b22291cb9d 194 {
leomerel 23:2a6ea31d8e23 195 connect_Xbee();
leomerel 21:5adfcfd83e95 196
leomerel 23:2a6ea31d8e23 197 t_feuRouge.start(set_feuRouge);
leomerel 23:2a6ea31d8e23 198 t_gestion.start(gestion);
leomerel 23:2a6ea31d8e23 199
pierreblouet 17:0694b399bd0d 200 while (true) {
leomerel 23:2a6ea31d8e23 201 //nécessaire pour lire (constamment) la valeur recue
pierreblouet 17:0694b399bd0d 202 uint32_t receive_value = xbee.process_rx_frames();
pierreblouet 18:972fb2937e41 203
leomerel 22:c3b22291cb9d 204 if(voituresFeu1 >= 10){led1=1;}
leomerel 22:c3b22291cb9d 205 else{led1=0;}
leomerel 12:9ec78b07c688 206 }
pierreblouet 17:0694b399bd0d 207 }