Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: XBeeLib mbed mbed-rtos EthernetInterface
Revision 31:7ca80c48a6d7, committed 2018-12-06
- 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
