Gestion du Traffic Adaptatif- Code du mbed coordinateur

Dependencies:   XBeeLib mbed mbed-rtos EthernetInterface

Committer:
leomerel
Date:
Thu Nov 22 21:52:51 2018 +0000
Revision:
23:2a6ea31d8e23
Parent:
22:c3b22291cb9d
Child:
24:bbde0b873a37
V2.1

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
leomerel 23:2a6ea31d8e23 23 DigitalOut feu_rouge(p12);
pierreblouet 17:0694b399bd0d 24 //orange
leomerel 23:2a6ea31d8e23 25 DigitalOut feu_orange(p14);
pierreblouet 17:0694b399bd0d 26 //vert
leomerel 23:2a6ea31d8e23 27 DigitalOut feu_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 23:2a6ea31d8e23 37 //Thread t_receive;
leomerel 23:2a6ea31d8e23 38 Thread t_feuRouge;
leomerel 23:2a6ea31d8e23 39 Thread t_gestion;
pierreblouet 17:0694b399bd0d 40
pierreblouet 17:0694b399bd0d 41 Serial *log_serial;
leomerel 23:2a6ea31d8e23 42 XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600);
leomerel 23:2a6ea31d8e23 43 const RemoteXBeeZB remoteDevice = RemoteXBeeZB(REMOTE_NODE_ADDR64);
pierreblouet 17:0694b399bd0d 44
pierreblouet 17:0694b399bd0d 45 /** Callback function, invoked at packet reception */
pierreblouet 17:0694b399bd0d 46 static void receive_cb(const RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len)
pierreblouet 17:0694b399bd0d 47 {
pierreblouet 17:0694b399bd0d 48 const uint64_t remote_addr64 = remote.get_addr64();
pierreblouet 17:0694b399bd0d 49 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 50
pierreblouet 20:2a94c9200119 51 /*for (int i = 0; i < len; i++)
pierreblouet 20:2a94c9200119 52 log_serial->printf("%02x ", data[i]);*/
leomerel 22:c3b22291cb9d 53
leomerel 22:c3b22291cb9d 54 if (data[0]==0x6D && voituresFeu1!=0){
leomerel 22:c3b22291cb9d 55 voituresFeu1--;
leomerel 22:c3b22291cb9d 56 printf("Nombre de voitures : %d",voituresFeu1);
leomerel 22:c3b22291cb9d 57 }
leomerel 23:2a6ea31d8e23 58 else if (data[0]==0x70){
leomerel 22:c3b22291cb9d 59 voituresFeu1++;
leomerel 22:c3b22291cb9d 60 printf("Nombre de voitures : %d",voituresFeu1);
leomerel 22:c3b22291cb9d 61 }
leomerel 23:2a6ea31d8e23 62 else if (data[0]==0x72){
leomerel 23:2a6ea31d8e23 63 feu_rouge = 0;
leomerel 23:2a6ea31d8e23 64 feu_orange = 0;
leomerel 23:2a6ea31d8e23 65 feu_vert = 1;
leomerel 23:2a6ea31d8e23 66 }
pierreblouet 17:0694b399bd0d 67
pierreblouet 17:0694b399bd0d 68 log_serial->printf("\r\n");
emilmont 1:491820ee784d 69 }
leomerel 12:9ec78b07c688 70
leomerel 22:c3b22291cb9d 71 /*void nbVoiture() {
leomerel 21:5adfcfd83e95 72 while(1) {
leomerel 21:5adfcfd83e95 73 if(boutonPlus){
leomerel 21:5adfcfd83e95 74 nombreDeVoiture++;
leomerel 21:5adfcfd83e95 75 }
leomerel 21:5adfcfd83e95 76 if(boutonMoins && nombreDeVoiture>0){
leomerel 21:5adfcfd83e95 77 nombreDeVoiture--;
leomerel 21:5adfcfd83e95 78 }
leomerel 21:5adfcfd83e95 79 printf("Nombre de voitures : %d \r\n", nombreDeVoiture);
leomerel 21:5adfcfd83e95 80 }
leomerel 22:c3b22291cb9d 81 }*/
pierreblouet 17:0694b399bd0d 82
leomerel 23:2a6ea31d8e23 83 static void send_explicit_data_to_remote_node(XBeeZB& xbee, const RemoteXBeeZB& RemoteDevice,int message)
leomerel 23:2a6ea31d8e23 84 {
pierreblouet 17:0694b399bd0d 85 const uint8_t dstEP = 0xE8;
pierreblouet 17:0694b399bd0d 86 const uint8_t srcEP = 0xE8;
pierreblouet 17:0694b399bd0d 87 const uint16_t clusterID = 0x0011;
pierreblouet 17:0694b399bd0d 88 const uint16_t profileID = 0xC105;
pierreblouet 17:0694b399bd0d 89
pierreblouet 18:972fb2937e41 90 char data1[]="r";
pierreblouet 18:972fb2937e41 91 char data2[]="v";
pierreblouet 18:972fb2937e41 92 char data3[]="e";
pierreblouet 18:972fb2937e41 93 if (message ==0){
pierreblouet 18:972fb2937e41 94 const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data1, strlen(data1));
pierreblouet 18:972fb2937e41 95 }
pierreblouet 18:972fb2937e41 96 else if (message ==1){
pierreblouet 18:972fb2937e41 97 const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data2, strlen(data2));
pierreblouet 18:972fb2937e41 98 }
pierreblouet 18:972fb2937e41 99 else {
pierreblouet 18:972fb2937e41 100 const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data3, strlen(data3));
pierreblouet 18:972fb2937e41 101 }
leomerel 22:c3b22291cb9d 102 }
leomerel 12:9ec78b07c688 103
leomerel 23:2a6ea31d8e23 104 void connect_Xbee()
pierreblouet 17:0694b399bd0d 105 {
pierreblouet 17:0694b399bd0d 106 log_serial = new Serial(DEBUG_TX, DEBUG_RX);
pierreblouet 17:0694b399bd0d 107 log_serial->baud(9600);
pierreblouet 17:0694b399bd0d 108 log_serial->printf("Sample application to demo how to receive unicast and broadcast data with the XBeeZB\r\n\r\n");
pierreblouet 17:0694b399bd0d 109 log_serial->printf(XB_LIB_BANNER);
pierreblouet 17:0694b399bd0d 110
leomerel 22:c3b22291cb9d 111 #if defined(ENABLE_LOGGING)
pierreblouet 17:0694b399bd0d 112 new DigiLoggerMbedSerial(log_serial, LogLevelInfo);
leomerel 22:c3b22291cb9d 113 #endif
pierreblouet 17:0694b399bd0d 114
pierreblouet 17:0694b399bd0d 115 /* Register callbacks */
pierreblouet 17:0694b399bd0d 116 xbee.register_receive_cb(&receive_cb);
pierreblouet 17:0694b399bd0d 117
pierreblouet 17:0694b399bd0d 118 RadioStatus const radioStatus = xbee.init();
pierreblouet 17:0694b399bd0d 119 MBED_ASSERT(radioStatus == Success);
leomerel 12:9ec78b07c688 120
pierreblouet 17:0694b399bd0d 121 /* Wait until the device has joined the network */
pierreblouet 17:0694b399bd0d 122 log_serial->printf("Waiting for device to join the network: ");
pierreblouet 17:0694b399bd0d 123 while (!xbee.is_joined()) {
pierreblouet 17:0694b399bd0d 124 wait_ms(1000);
pierreblouet 17:0694b399bd0d 125 log_serial->printf(".");
leomerel 12:9ec78b07c688 126 }
pierreblouet 17:0694b399bd0d 127 log_serial->printf("OK\r\n");
leomerel 23:2a6ea31d8e23 128 }
leomerel 23:2a6ea31d8e23 129
leomerel 23:2a6ea31d8e23 130 void set_feuRouge()
leomerel 23:2a6ea31d8e23 131 {
leomerel 23:2a6ea31d8e23 132 while(1)
leomerel 23:2a6ea31d8e23 133 {
leomerel 23:2a6ea31d8e23 134 Thread::signal_wait(0x1);
leomerel 23:2a6ea31d8e23 135 feu_vert = 0;
leomerel 23:2a6ea31d8e23 136 feu_orange = 1;
leomerel 23:2a6ea31d8e23 137 Thread::wait(2000);
leomerel 23:2a6ea31d8e23 138 feu_orange = 0;
leomerel 23:2a6ea31d8e23 139 feu_rouge = 1;
leomerel 23:2a6ea31d8e23 140 send_explicit_data_to_remote_node(xbee, remoteDevice,0);
leomerel 23:2a6ea31d8e23 141 }
leomerel 23:2a6ea31d8e23 142 }
leomerel 23:2a6ea31d8e23 143
leomerel 23:2a6ea31d8e23 144 void gestion()
leomerel 23:2a6ea31d8e23 145 {
leomerel 23:2a6ea31d8e23 146 int i=0;
leomerel 23:2a6ea31d8e23 147 while(1)
leomerel 23:2a6ea31d8e23 148 {
leomerel 23:2a6ea31d8e23 149 Thread::wait(100);
leomerel 23:2a6ea31d8e23 150 if(i==40){
leomerel 23:2a6ea31d8e23 151 t_feuRouge.signal_set(0x1);
leomerel 23:2a6ea31d8e23 152 }
leomerel 23:2a6ea31d8e23 153 if(i==80){
leomerel 23:2a6ea31d8e23 154 send_explicit_data_to_remote_node(xbee, remoteDevice,1);
leomerel 23:2a6ea31d8e23 155 i=0;
leomerel 23:2a6ea31d8e23 156 }
leomerel 23:2a6ea31d8e23 157 i++;
leomerel 23:2a6ea31d8e23 158 }
leomerel 22:c3b22291cb9d 159 }
leomerel 22:c3b22291cb9d 160
leomerel 22:c3b22291cb9d 161 int main()
leomerel 22:c3b22291cb9d 162 {
leomerel 23:2a6ea31d8e23 163 connect_Xbee();
leomerel 21:5adfcfd83e95 164
leomerel 23:2a6ea31d8e23 165 t_feuRouge.start(set_feuRouge);
leomerel 23:2a6ea31d8e23 166 t_gestion.start(gestion);
leomerel 23:2a6ea31d8e23 167
pierreblouet 17:0694b399bd0d 168 while (true) {
leomerel 23:2a6ea31d8e23 169 //nécessaire pour lire (constamment) la valeur recue
pierreblouet 17:0694b399bd0d 170 uint32_t receive_value = xbee.process_rx_frames();
pierreblouet 18:972fb2937e41 171
leomerel 22:c3b22291cb9d 172 if(voituresFeu1 >= 10){led1=1;}
leomerel 22:c3b22291cb9d 173 else{led1=0;}
leomerel 12:9ec78b07c688 174 }
pierreblouet 17:0694b399bd0d 175 }