Senses an earthquake with MPU6050 and gets time, coordenates and other details of the event with an Adafruit GPS. All the info is sent to an HTTP server

Dependencies:   MPU6050 mbed-http MBed_Adafruit-GPS-Library

Committer:
Alvaro13
Date:
Thu Aug 01 04:36:59 2019 +0000
Revision:
37:fcb5efa391d5
Parent:
36:32a0a71555f0
Child:
38:0813e461b835
JSON  created for HTTP post function

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Alvaro13 36:32a0a71555f0 1
Alvaro13 36:32a0a71555f0 2 #include "mbed.h"
Alvaro13 36:32a0a71555f0 3 #include "MPU6050.h"
Alvaro13 36:32a0a71555f0 4 #include "REF_VALUES.h"
Alvaro13 36:32a0a71555f0 5 #include "CONSTANTS.h"
Alvaro13 36:32a0a71555f0 6 #include "FUNCTIONS.h"
Alvaro13 36:32a0a71555f0 7 #include "Timer.h"
Alvaro13 36:32a0a71555f0 8 #include "MBed_Adafruit_GPS.h"
Alvaro13 36:32a0a71555f0 9 #include "http_request.h"
Alvaro13 36:32a0a71555f0 10 #include "network-helper.h"
Alvaro13 36:32a0a71555f0 11 #include "mbed_mem_trace.h"
Alvaro13 36:32a0a71555f0 12
Alvaro13 36:32a0a71555f0 13 /**
Alvaro13 36:32a0a71555f0 14 * Debbuging led
Alvaro13 36:32a0a71555f0 15 */
Alvaro13 36:32a0a71555f0 16 DigitalOut myled(LED1);
Alvaro13 36:32a0a71555f0 17
Alvaro13 36:32a0a71555f0 18 /**
Alvaro13 36:32a0a71555f0 19 * Puerto serial
Alvaro13 36:32a0a71555f0 20 */
Alvaro13 36:32a0a71555f0 21 Serial pc(USBTX, USBRX, BAUD_RATE);
Alvaro13 36:32a0a71555f0 22
Alvaro13 36:32a0a71555f0 23 /**
Alvaro13 36:32a0a71555f0 24 * Puntero hacia el puerto serial utilizado para la comunicacion entre el GPS y el Micro
Alvaro13 36:32a0a71555f0 25 */
Alvaro13 36:32a0a71555f0 26 Serial * gps_Serial;
Alvaro13 36:32a0a71555f0 27
Alvaro13 36:32a0a71555f0 28 /**
Alvaro13 36:32a0a71555f0 29 * Objeto MPU6050
Alvaro13 36:32a0a71555f0 30 */
Alvaro13 36:32a0a71555f0 31 MPU6050 mpu(PF_15, PF_14);
Alvaro13 36:32a0a71555f0 32
Alvaro13 36:32a0a71555f0 33 /**
Alvaro13 36:32a0a71555f0 34 * Threads
Alvaro13 36:32a0a71555f0 35 */
Alvaro13 36:32a0a71555f0 36 Thread sampleAccelero;
Alvaro13 36:32a0a71555f0 37 Thread printDebug;
Alvaro13 36:32a0a71555f0 38 Thread sendAccelero;
Alvaro13 36:32a0a71555f0 39 Thread getCoordinates;
Alvaro13 36:32a0a71555f0 40
Alvaro13 36:32a0a71555f0 41 /**
Alvaro13 36:32a0a71555f0 42 * Mutex
Alvaro13 36:32a0a71555f0 43 */
Alvaro13 36:32a0a71555f0 44 Mutex semaforo;
Alvaro13 36:32a0a71555f0 45 Mutex globalVar;
Alvaro13 36:32a0a71555f0 46
Alvaro13 36:32a0a71555f0 47 /**
Alvaro13 36:32a0a71555f0 48 * Mailboxes
Alvaro13 36:32a0a71555f0 49 */
Alvaro13 36:32a0a71555f0 50 Mail<acceleration, 1> mail_box;
Alvaro13 36:32a0a71555f0 51 Mail<acceleration, 1> mail_meass;
Alvaro13 36:32a0a71555f0 52
Alvaro13 36:32a0a71555f0 53 /**
Alvaro13 36:32a0a71555f0 54 * Variables de control
Alvaro13 36:32a0a71555f0 55 */
Alvaro13 36:32a0a71555f0 56 bool earthquakeHappening = false;
Alvaro13 36:32a0a71555f0 57 bool beenHere = false;
Alvaro13 36:32a0a71555f0 58
Alvaro13 36:32a0a71555f0 59
Alvaro13 36:32a0a71555f0 60
Alvaro13 36:32a0a71555f0 61 /**
Alvaro13 36:32a0a71555f0 62 * Handler para la utilizacion del GPS
Alvaro13 36:32a0a71555f0 63 */
Alvaro13 36:32a0a71555f0 64 Adafruit_GPS myGPS(new Serial(PC_12, PD_2)); //object of Adafruit's GPS class
Alvaro13 36:32a0a71555f0 65
Alvaro13 36:32a0a71555f0 66 /**
Alvaro13 36:32a0a71555f0 67 * Codigo para el HTTP post
Alvaro13 36:32a0a71555f0 68 */
Alvaro13 36:32a0a71555f0 69 void dump_response(HttpResponse* res) {
Alvaro13 36:32a0a71555f0 70 printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());
Alvaro13 36:32a0a71555f0 71
Alvaro13 36:32a0a71555f0 72 printf("Headers:\n");
Alvaro13 36:32a0a71555f0 73 for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
Alvaro13 36:32a0a71555f0 74 printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
Alvaro13 36:32a0a71555f0 75 }
Alvaro13 36:32a0a71555f0 76 printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
Alvaro13 36:32a0a71555f0 77 }
Alvaro13 36:32a0a71555f0 78
Alvaro13 36:32a0a71555f0 79 /**
Alvaro13 36:32a0a71555f0 80 * Imprime los resultados de la medicion del sismo
Alvaro13 36:32a0a71555f0 81 */
Alvaro13 36:32a0a71555f0 82 void print_debug(){
Alvaro13 36:32a0a71555f0 83 string tweet;
Alvaro13 36:32a0a71555f0 84 NetworkInterface* network = connect_to_default_network_interface();
Alvaro13 36:32a0a71555f0 85 if (!network) {
Alvaro13 36:32a0a71555f0 86 printf("Cannot connect to the network, see serial output\n");
Alvaro13 36:32a0a71555f0 87 return ;
Alvaro13 36:32a0a71555f0 88 }
Alvaro13 36:32a0a71555f0 89 // Create a TCP socket
Alvaro13 36:32a0a71555f0 90 printf("\n----- Setting up TCP connection -----\n");
Alvaro13 36:32a0a71555f0 91
Alvaro13 36:32a0a71555f0 92 TCPSocket* socket = new TCPSocket();
Alvaro13 36:32a0a71555f0 93 nsapi_error_t open_result = socket->open(network);
Alvaro13 36:32a0a71555f0 94 if (open_result != 0) {
Alvaro13 36:32a0a71555f0 95 printf("Opening TCPSocket failed... %d\n", open_result);
Alvaro13 36:32a0a71555f0 96 return ;
Alvaro13 36:32a0a71555f0 97 }
Alvaro13 36:32a0a71555f0 98
Alvaro13 36:32a0a71555f0 99 nsapi_error_t connect_result = socket->connect("10.60.16.220", 80);
Alvaro13 36:32a0a71555f0 100 if (connect_result != 0) {
Alvaro13 36:32a0a71555f0 101 printf("Connecting over TCPSocket failed... %d\n", connect_result);
Alvaro13 36:32a0a71555f0 102 return ;
Alvaro13 36:32a0a71555f0 103 }
Alvaro13 36:32a0a71555f0 104
Alvaro13 36:32a0a71555f0 105 printf("Connected over TCP to httpbin.org:80\n");
Alvaro13 37:fcb5efa391d5 106 char timeChar[20]; //string para la hora
Alvaro13 37:fcb5efa391d5 107 char dateChar[20]; //string para la fecha
Alvaro13 37:fcb5efa391d5 108 char locationChar[20]; //string para las coordenadas
Alvaro13 37:fcb5efa391d5 109 char altitudeChar[20]; //string para la altura
Alvaro13 37:fcb5efa391d5 110 char tweetChar[30]; //string para el tweet
Alvaro13 36:32a0a71555f0 111 while(true){
Alvaro13 36:32a0a71555f0 112 wait(1);
Alvaro13 36:32a0a71555f0 113 osEvent evt = mail_meass.get();
Alvaro13 36:32a0a71555f0 114 if (evt.status == osEventMail) {
Alvaro13 36:32a0a71555f0 115 acceleration *mail = (acceleration*)evt.value.p;
Alvaro13 36:32a0a71555f0 116 if (mail->x == 0 && mail->y == 0){
Alvaro13 36:32a0a71555f0 117 mail_meass.free(mail);
Alvaro13 36:32a0a71555f0 118 continue;
Alvaro13 36:32a0a71555f0 119 }
Alvaro13 36:32a0a71555f0 120 tweet = compute_intensity(mail->x, mail->y);
Alvaro13 37:fcb5efa391d5 121
Alvaro13 36:32a0a71555f0 122 semaforo.lock();
Alvaro13 36:32a0a71555f0 123 pc.printf("%s\n\r",tweet);
Alvaro13 36:32a0a71555f0 124 semaforo.unlock();
Alvaro13 36:32a0a71555f0 125 mail_meass.free(mail);
Alvaro13 37:fcb5efa391d5 126 strcpy(tweetChar, tweet.c_str());
Alvaro13 37:fcb5efa391d5 127 sprintf(timeChar,"%d:%d:%d.%u\r\n", myGPS.hour, myGPS.minute, myGPS.seconds, myGPS.milliseconds);
Alvaro13 37:fcb5efa391d5 128 sprintf(dateChar,"%d/%d/20%d\r\n", myGPS.day, myGPS.month, myGPS.year);
Alvaro13 37:fcb5efa391d5 129 sprintf(locationChar,"%f%c, %f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon);
Alvaro13 37:fcb5efa391d5 130 sprintf(altitudeChar,"%f\r\n", myGPS.altitude);
Alvaro13 36:32a0a71555f0 131
Alvaro13 37:fcb5efa391d5 132 // POST request to http server
Alvaro13 36:32a0a71555f0 133 HttpRequest* post_req = new HttpRequest(socket, HTTP_POST, "http://10.60.16.200");
Alvaro13 36:32a0a71555f0 134 post_req->set_header("Content-Type", "application/json");
Alvaro13 37:fcb5efa391d5 135
Alvaro13 37:fcb5efa391d5 136 // Formando el JSON de salida en la variable body
Alvaro13 37:fcb5efa391d5 137 char body[90];
Alvaro13 37:fcb5efa391d5 138 strcpy (body,"{\"Message\":\"");
Alvaro13 37:fcb5efa391d5 139 strcat (body, tweetChar);
Alvaro13 37:fcb5efa391d5 140 strcat (body, "\", ");
Alvaro13 37:fcb5efa391d5 141 strcat (body,"\"Time\":\"");
Alvaro13 37:fcb5efa391d5 142 strcat (body, timeChar);
Alvaro13 37:fcb5efa391d5 143 strcat (body, "\", ");
Alvaro13 37:fcb5efa391d5 144 strcat (body,"\"Date\":\"");
Alvaro13 37:fcb5efa391d5 145 strcat (body, dateChar);
Alvaro13 37:fcb5efa391d5 146 strcat (body, "\", ");
Alvaro13 37:fcb5efa391d5 147 strcat (body,"\"Location\":\"");
Alvaro13 37:fcb5efa391d5 148 strcat (body, locationChar);
Alvaro13 37:fcb5efa391d5 149 strcat (body, "\", ");
Alvaro13 37:fcb5efa391d5 150 strcat (body,"\"Altitude\":\"");
Alvaro13 37:fcb5efa391d5 151 strcat (body, altitudeChar);
Alvaro13 37:fcb5efa391d5 152 strcat (body, "\"");
Alvaro13 37:fcb5efa391d5 153 strcat (body, "}");
Alvaro13 37:fcb5efa391d5 154
Alvaro13 37:fcb5efa391d5 155 pc.printf("%s\n\r",body);
Alvaro13 36:32a0a71555f0 156
Alvaro13 36:32a0a71555f0 157 HttpResponse* post_res = post_req->send(body, strlen(body));
Alvaro13 36:32a0a71555f0 158 if (!post_res) {
Alvaro13 36:32a0a71555f0 159 printf("HttpRequest failed (error code %d)\n", post_req->get_error());
Alvaro13 36:32a0a71555f0 160 return ;
Alvaro13 36:32a0a71555f0 161 }
Alvaro13 36:32a0a71555f0 162
Alvaro13 36:32a0a71555f0 163 printf("\n----- HTTP POST response -----\n");
Alvaro13 36:32a0a71555f0 164 dump_response(post_res);
Alvaro13 36:32a0a71555f0 165
Alvaro13 36:32a0a71555f0 166 delete post_req;
Alvaro13 36:32a0a71555f0 167
Alvaro13 36:32a0a71555f0 168 }
Alvaro13 36:32a0a71555f0 169 }
Alvaro13 36:32a0a71555f0 170 }
Alvaro13 36:32a0a71555f0 171
Alvaro13 36:32a0a71555f0 172
Alvaro13 36:32a0a71555f0 173 /**
Alvaro13 36:32a0a71555f0 174 * Interpreta la acceleracion sismica del terremoto a una escala de la intensidad del mismo.
Alvaro13 36:32a0a71555f0 175 */
Alvaro13 36:32a0a71555f0 176 string compute_intensity(float xPGA, float yPGA){
Alvaro13 36:32a0a71555f0 177 float maxPGA;
Alvaro13 36:32a0a71555f0 178
Alvaro13 36:32a0a71555f0 179 xPGA >= yPGA ? maxPGA = xPGA : maxPGA = yPGA;
Alvaro13 36:32a0a71555f0 180
Alvaro13 36:32a0a71555f0 181 string result;
Alvaro13 36:32a0a71555f0 182
Alvaro13 36:32a0a71555f0 183 if (maxPGA >= moderate.lowBound && maxPGA <= moderate.highBound)
Alvaro13 36:32a0a71555f0 184 result = "Earthquake detected! \t Mercalli Scale: " + moderate.scale + "\t" + moderate.damage + " Damage";
Alvaro13 36:32a0a71555f0 185
Alvaro13 36:32a0a71555f0 186 else if (maxPGA >= strong.lowBound && maxPGA <= strong.highBound)
Alvaro13 36:32a0a71555f0 187 result = "Earthquake detected! \t Mercalli Scale: " + strong.scale + "\t" + strong.damage + " Damage";
Alvaro13 36:32a0a71555f0 188
Alvaro13 36:32a0a71555f0 189 else if (maxPGA >= veryStrong.lowBound && maxPGA <= veryStrong.highBound)
Alvaro13 36:32a0a71555f0 190 result = "Earthquake detected! \t Mercalli Scale: " + veryStrong.scale + "\t" + veryStrong.damage + " Damage";
Alvaro13 36:32a0a71555f0 191
Alvaro13 36:32a0a71555f0 192 else if (maxPGA >= severe.lowBound && maxPGA <= severe.highBound)
Alvaro13 36:32a0a71555f0 193 result = "Earthquake detected! \t Mercalli Scale: " + severe.scale + "\t" + severe.damage + " Damage";
Alvaro13 36:32a0a71555f0 194
Alvaro13 36:32a0a71555f0 195 else if (maxPGA >= violent.lowBound && maxPGA <= violent.highBound)
Alvaro13 36:32a0a71555f0 196 result = "Earthquake detected! \t Mercalli Scale: " + violent.scale + "\t" + violent.damage + " Damage";
Alvaro13 36:32a0a71555f0 197
Alvaro13 36:32a0a71555f0 198 else if (maxPGA >= extreme.lowBound && maxPGA <= extreme.highBound)
Alvaro13 36:32a0a71555f0 199 result = "Earthquake detected! \t Mercalli Scale: " + extreme.scale + "\t" + extreme.damage + " Damage";
Alvaro13 36:32a0a71555f0 200
Alvaro13 36:32a0a71555f0 201 else
Alvaro13 36:32a0a71555f0 202 result = "No Intensity recognized";
Alvaro13 36:32a0a71555f0 203
Alvaro13 36:32a0a71555f0 204 return result;
Alvaro13 36:32a0a71555f0 205 }
Alvaro13 36:32a0a71555f0 206
Alvaro13 36:32a0a71555f0 207
Alvaro13 36:32a0a71555f0 208 /**
Alvaro13 36:32a0a71555f0 209 * Mide la data entregada por el acelerometro
Alvaro13 36:32a0a71555f0 210 */
Alvaro13 36:32a0a71555f0 211 void measure() {
Alvaro13 36:32a0a71555f0 212
Alvaro13 36:32a0a71555f0 213 // Ajusta la sensibilidad del sensor
Alvaro13 36:32a0a71555f0 214 mpu.setAcceleroRange(MPU6050_ACCELERO_RANGE_2G);
Alvaro13 36:32a0a71555f0 215
Alvaro13 36:32a0a71555f0 216 // Configura la frecuencia de corte del filtro paso bajo
Alvaro13 36:32a0a71555f0 217 mpu.setBW(MPU6050_BW_5);
Alvaro13 36:32a0a71555f0 218
Alvaro13 36:32a0a71555f0 219 // Test the connection
Alvaro13 36:32a0a71555f0 220 if (mpu.testConnection())
Alvaro13 36:32a0a71555f0 221 pc.printf("MPU6050 test passed \r\n");
Alvaro13 36:32a0a71555f0 222 else
Alvaro13 36:32a0a71555f0 223 pc.printf("MPU6050 test failed \r\n");
Alvaro13 36:32a0a71555f0 224
Alvaro13 36:32a0a71555f0 225 /**
Alvaro13 36:32a0a71555f0 226 * Array que almacena la data Raw para la acceleracion en X, Y, Z
Alvaro13 36:32a0a71555f0 227 */
Alvaro13 36:32a0a71555f0 228 float acce[3];
Alvaro13 36:32a0a71555f0 229 /**
Alvaro13 36:32a0a71555f0 230 * Aceleracion en X
Alvaro13 36:32a0a71555f0 231 */
Alvaro13 36:32a0a71555f0 232 float xAcc;
Alvaro13 36:32a0a71555f0 233 /**
Alvaro13 36:32a0a71555f0 234 * Aceleracion en Y
Alvaro13 36:32a0a71555f0 235 */
Alvaro13 36:32a0a71555f0 236 float yAcc;
Alvaro13 36:32a0a71555f0 237
Alvaro13 36:32a0a71555f0 238
Alvaro13 36:32a0a71555f0 239 while(1) {
Alvaro13 36:32a0a71555f0 240 // Adecua el muestreo para una frecuencia determinada
Alvaro13 36:32a0a71555f0 241 wait(SAMPLE_RATE_MEASURE);
Alvaro13 36:32a0a71555f0 242
Alvaro13 36:32a0a71555f0 243 // Procesa la data obtenida del sensor de las aceleraciones en X, Y, Z
Alvaro13 36:32a0a71555f0 244 mpu.getAccelero(acce);
Alvaro13 36:32a0a71555f0 245
Alvaro13 36:32a0a71555f0 246 // Aceleracion sismica en XY (g)
Alvaro13 36:32a0a71555f0 247 xAcc = (float)acce[0] / (GRAVITY_CONSTANT);
Alvaro13 36:32a0a71555f0 248 yAcc = (float)acce[1] / (GRAVITY_CONSTANT);
Alvaro13 36:32a0a71555f0 249
Alvaro13 36:32a0a71555f0 250 acceleration* mailAcc = mail_box.alloc();
Alvaro13 36:32a0a71555f0 251
Alvaro13 36:32a0a71555f0 252 mailAcc->x = abs(xAcc);
Alvaro13 36:32a0a71555f0 253 mailAcc->y = abs(yAcc);
Alvaro13 36:32a0a71555f0 254 mail_box.put(mailAcc);
Alvaro13 36:32a0a71555f0 255
Alvaro13 36:32a0a71555f0 256 // Revisa la ocurrencia de un sismo
Alvaro13 36:32a0a71555f0 257 if (abs(xAcc) >= moderate.lowBound || abs(yAcc) >= moderate.lowBound && !beenHere){
Alvaro13 36:32a0a71555f0 258 globalVar.lock();
Alvaro13 36:32a0a71555f0 259 earthquakeHappening = true;
Alvaro13 36:32a0a71555f0 260 beenHere = true;
Alvaro13 36:32a0a71555f0 261 globalVar.unlock();
Alvaro13 36:32a0a71555f0 262 }
Alvaro13 36:32a0a71555f0 263
Alvaro13 36:32a0a71555f0 264 }
Alvaro13 36:32a0a71555f0 265
Alvaro13 36:32a0a71555f0 266 }
Alvaro13 36:32a0a71555f0 267
Alvaro13 36:32a0a71555f0 268 void send_meassure(){
Alvaro13 36:32a0a71555f0 269 Timer tick;
Alvaro13 36:32a0a71555f0 270 bool meassuring = false;
Alvaro13 36:32a0a71555f0 271 acceleration *data;
Alvaro13 36:32a0a71555f0 272 acceleration maxData;
Alvaro13 36:32a0a71555f0 273 maxData.x = 0;
Alvaro13 36:32a0a71555f0 274 maxData.y = 0;
Alvaro13 36:32a0a71555f0 275 while (true){
Alvaro13 36:32a0a71555f0 276 wait_ms(200);
Alvaro13 36:32a0a71555f0 277 globalVar.lock();
Alvaro13 36:32a0a71555f0 278 if (earthquakeHappening)
Alvaro13 36:32a0a71555f0 279 meassuring = true;
Alvaro13 36:32a0a71555f0 280 globalVar.unlock();
Alvaro13 36:32a0a71555f0 281 while (meassuring){
Alvaro13 36:32a0a71555f0 282 wait_ms(50);
Alvaro13 36:32a0a71555f0 283 osEvent evt = mail_box.get();
Alvaro13 36:32a0a71555f0 284 if (evt.status == osEventMail) {
Alvaro13 36:32a0a71555f0 285 acceleration *mail = (acceleration*)evt.value.p;
Alvaro13 36:32a0a71555f0 286 data = mail;
Alvaro13 36:32a0a71555f0 287 mail_box.free(mail);
Alvaro13 36:32a0a71555f0 288 }
Alvaro13 36:32a0a71555f0 289 if (data->x >= moderate.lowBound || data->y >= moderate.lowBound ){
Alvaro13 36:32a0a71555f0 290 tick.reset();
Alvaro13 36:32a0a71555f0 291 if (data->x > maxData.x || data->y > maxData.y){
Alvaro13 36:32a0a71555f0 292 maxData = *data;
Alvaro13 36:32a0a71555f0 293 }
Alvaro13 36:32a0a71555f0 294 }
Alvaro13 36:32a0a71555f0 295 else {
Alvaro13 36:32a0a71555f0 296 tick.start();
Alvaro13 36:32a0a71555f0 297 if (tick.read_ms() <= 200)
Alvaro13 36:32a0a71555f0 298 continue;
Alvaro13 36:32a0a71555f0 299 tick.stop();
Alvaro13 36:32a0a71555f0 300 meassuring = false;
Alvaro13 36:32a0a71555f0 301 }
Alvaro13 36:32a0a71555f0 302 }
Alvaro13 36:32a0a71555f0 303 globalVar.lock();
Alvaro13 36:32a0a71555f0 304 beenHere = false;
Alvaro13 36:32a0a71555f0 305 earthquakeHappening = false;
Alvaro13 36:32a0a71555f0 306 globalVar.unlock();
Alvaro13 36:32a0a71555f0 307 acceleration* mailAcc = mail_meass.alloc();
Alvaro13 36:32a0a71555f0 308 mailAcc->x = maxData.x;
Alvaro13 36:32a0a71555f0 309 mailAcc->y = maxData.y;
Alvaro13 36:32a0a71555f0 310 mail_meass.put(mailAcc);
Alvaro13 36:32a0a71555f0 311 maxData.x = 0;
Alvaro13 36:32a0a71555f0 312 maxData.y = 0;
Alvaro13 36:32a0a71555f0 313 }
Alvaro13 36:32a0a71555f0 314 }
Alvaro13 36:32a0a71555f0 315
Alvaro13 36:32a0a71555f0 316 /**
Alvaro13 36:32a0a71555f0 317 * Se encarga de obtener la cordenadas del Thread
Alvaro13 36:32a0a71555f0 318 */
Alvaro13 36:32a0a71555f0 319 void getGPSCoordinates(){
Alvaro13 36:32a0a71555f0 320
Alvaro13 36:32a0a71555f0 321 char c; // when read via Adafruit_GPS::read(), the class returns single character stored here
Alvaro13 36:32a0a71555f0 322 Timer refresh_Timer; // sets up a timer for use in loop; how often do we print GPS info?
Alvaro13 36:32a0a71555f0 323 const int refresh_Time = 2000; //refresh time in ms
Alvaro13 36:32a0a71555f0 324
Alvaro13 36:32a0a71555f0 325 myGPS.begin(9600); // sets baud rate for GPS communication; note this may be changed via Adafruit_GPS::sendCommand(char *)
Alvaro13 36:32a0a71555f0 326 // a list of GPS commands is available at http://www.adafruit.com/datasheets/PMTK_A08.pdf
Alvaro13 36:32a0a71555f0 327
Alvaro13 36:32a0a71555f0 328 myGPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); //these commands are defined in MBed_Adafruit_GPS.h; a link is provided there for command creation
Alvaro13 36:32a0a71555f0 329 myGPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
Alvaro13 36:32a0a71555f0 330 myGPS.sendCommand(PGCMD_ANTENNA);
Alvaro13 36:32a0a71555f0 331
Alvaro13 36:32a0a71555f0 332 refresh_Timer.start(); // starts the clock on the timer
Alvaro13 36:32a0a71555f0 333
Alvaro13 36:32a0a71555f0 334 while(true){
Alvaro13 36:32a0a71555f0 335 c = myGPS.read(); // queries the GPS
Alvaro13 36:32a0a71555f0 336
Alvaro13 36:32a0a71555f0 337 // check if we recieved a new message from GPS, if so, attempt to parse it,
Alvaro13 36:32a0a71555f0 338 if ( myGPS.newNMEAreceived() )
Alvaro13 36:32a0a71555f0 339 if ( !myGPS.parse(myGPS.lastNMEA()) )
Alvaro13 36:32a0a71555f0 340 continue;
Alvaro13 36:32a0a71555f0 341 }
Alvaro13 36:32a0a71555f0 342 }
Alvaro13 36:32a0a71555f0 343
Alvaro13 36:32a0a71555f0 344
Alvaro13 36:32a0a71555f0 345 int main()
Alvaro13 36:32a0a71555f0 346 {
Alvaro13 36:32a0a71555f0 347 sampleAccelero.start(measure);
Alvaro13 36:32a0a71555f0 348 sendAccelero.start(send_meassure);
Alvaro13 36:32a0a71555f0 349 printDebug.start(print_debug);
Alvaro13 36:32a0a71555f0 350 getCoordinates.start(getGPSCoordinates);
Alvaro13 36:32a0a71555f0 351 }