ESTE PROGRAMA TOMA UNA CADENA DE GPS NEMEA Y CREA LA CADENA QUE EN GOOGLE MAPS SE ABRE EL MAPA INDICANDO LA GEOLOCALIZACION lA LIBRERIA GPS, FUE MODIFICADA EN LA ESTRUCUTURA DE DATOS, PARA RECONOCER LA VARIABLE (LOCK)DEL GPS QUE INDICA SI LOS DATOS SON ACEPTABLES EL PROGRAMA SE PRUEBA CON EL GPS VIRTUAL DE PROTEUS Y SE INYECTAN LOS DATOS A UNA FRDMKL25Z ATRAVES DE UN DONGLE QUE SE VINCULA DE FORMA LOGICA AL COMPIM DEL PROTEUS

Dependents:   GoogleMapa

Fork of GPS_G by joshema 216

/media/uploads/tony63/tareagsm.png

ESTE PROGRAMA TOMA UNA CADENA DE GPS NEMEA Y CREA LA CADENA QUE EN GOOGLE MAPS, SE ABRE EL MAPA INDICANDO LA GEOLOCALIZACION LA LIBRERIA GPS, FUE MODIFICADA EN LA ESTRUCUTURA DE DATOS, PARA RECONOCER LA VARIABLE (LOCK)DEL GPS QUE INDICA SI LOS DATOS SON ACEPTABLES. EL PROGRAMA SE PRUEBA CON EL GPS VIRTUAL DE PROTEUS Y SE INYECTAN LOS DATOS A UNA FRDMKL25Z ATRAVES DE UN DONGLE QUE SE VINCULA DE FORMA LÓGICA AL COMPIM DEL PROTEUS. LAS CONEXIONES LA MUESTRA LA FIGURA DE ARRIBA, SI SE DESEA INCORPORAR A UN RASTREADOR SATELITAL. EL LED VERDE SE ENCIENDE SOLO SI LOS DATOS SON ACEPTABLES, LAMENTABLEMENTE EL GPS DE PROTEUS NO MODIFICA LA CADENA, SI SE CONFIGURAN MENOS DE TRES SATÉLITES EN VISTA.

LA CADENA RESULTANTE AL ESQUEMA ES LA SIGUIENTE. EL CENTRO DEL ESTADIO ATANACIO GIRARDOT, EN LA CIUDAD DE MEDELLÍN - COLOMBIA.

http://maps.google.com/maps?q=6.256791,-75.590302

Committer:
simon
Date:
Tue Jun 08 14:10:27 2010 +0000
Revision:
0:15611c7938a3
Child:
1:df8295aa2b2b

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 0:15611c7938a3 1 /* mbed EM-406 GPS Module Library
simon 0:15611c7938a3 2 * Copyright (c) 2008-2010, sford
simon 0:15611c7938a3 3 *
simon 0:15611c7938a3 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
simon 0:15611c7938a3 5 * of this software and associated documentation files (the "Software"), to deal
simon 0:15611c7938a3 6 * in the Software without restriction, including without limitation the rights
simon 0:15611c7938a3 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
simon 0:15611c7938a3 8 * copies of the Software, and to permit persons to whom the Software is
simon 0:15611c7938a3 9 * furnished to do so, subject to the following conditions:
simon 0:15611c7938a3 10 *
simon 0:15611c7938a3 11 * The above copyright notice and this permission notice shall be included in
simon 0:15611c7938a3 12 * all copies or substantial portions of the Software.
simon 0:15611c7938a3 13 *
simon 0:15611c7938a3 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
simon 0:15611c7938a3 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
simon 0:15611c7938a3 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
simon 0:15611c7938a3 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
simon 0:15611c7938a3 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
simon 0:15611c7938a3 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
simon 0:15611c7938a3 20 * THE SOFTWARE.
simon 0:15611c7938a3 21 */
simon 0:15611c7938a3 22
simon 0:15611c7938a3 23 #include "GPS.h"
simon 0:15611c7938a3 24
simon 0:15611c7938a3 25 GPS::GPS(PinName tx, PinName rx) : _gps(tx, rx) {
simon 0:15611c7938a3 26 _gps.baud(4800);
simon 0:15611c7938a3 27 longitude = 0.0;
simon 0:15611c7938a3 28 latitude = 0.0;
simon 0:15611c7938a3 29 }
simon 0:15611c7938a3 30
simon 0:15611c7938a3 31 int GPS::sample() {
simon 0:15611c7938a3 32 float time;
simon 0:15611c7938a3 33 char ns, ew;
simon 0:15611c7938a3 34 int lock;
simon 0:15611c7938a3 35
simon 0:15611c7938a3 36 while(1) {
simon 0:15611c7938a3 37 getline();
simon 0:15611c7938a3 38
simon 0:15611c7938a3 39 // Check if it is a GPGGA msg (matches both locked and non-locked msg)
simon 0:15611c7938a3 40 if(sscanf(msg, "GPGGA,%f,%f,%c,%f,%c,%d", &time, &latitude, &ns, &longitude, &ew, &lock) >= 1) {
simon 0:15611c7938a3 41 if(!lock) {
simon 0:15611c7938a3 42 longitude = 0.0;
simon 0:15611c7938a3 43 latitude = 0.0;
simon 0:15611c7938a3 44 return 0;
simon 0:15611c7938a3 45 } else {
simon 0:15611c7938a3 46 if(ns == 'S') { latitude *= -1.0; }
simon 0:15611c7938a3 47 if(ew == 'W') { longitude *= -1.0; }
simon 0:15611c7938a3 48 float degrees = trunc(latitude / 100.0f);
simon 0:15611c7938a3 49 float minutes = latitude - (degrees * 100.0f);
simon 0:15611c7938a3 50 latitude = degrees + minutes / 60.0f;
simon 0:15611c7938a3 51 degrees = trunc(longitude / 100.0f * 0.01f);
simon 0:15611c7938a3 52 minutes = longitude - (degrees * 100.0f);
simon 0:15611c7938a3 53 longitude = degrees + minutes / 60.0f;
simon 0:15611c7938a3 54 return 1;
simon 0:15611c7938a3 55 }
simon 0:15611c7938a3 56 }
simon 0:15611c7938a3 57 }
simon 0:15611c7938a3 58 }
simon 0:15611c7938a3 59
simon 0:15611c7938a3 60 float GPS::trunc(float v) {
simon 0:15611c7938a3 61 if(v < 0.0) {
simon 0:15611c7938a3 62 v*= -1.0;
simon 0:15611c7938a3 63 v = floor(v);
simon 0:15611c7938a3 64 v*=-1.0;
simon 0:15611c7938a3 65 } else {
simon 0:15611c7938a3 66 v = floor(v);
simon 0:15611c7938a3 67 }
simon 0:15611c7938a3 68 return v;
simon 0:15611c7938a3 69 }
simon 0:15611c7938a3 70
simon 0:15611c7938a3 71 void GPS::getline() {
simon 0:15611c7938a3 72 while(_gps.getc() != '$'); // wait for the start of a line
simon 0:15611c7938a3 73 for(int i=0; i<256; i++) {
simon 0:15611c7938a3 74 msg[i] = _gps.getc();
simon 0:15611c7938a3 75 if(msg[i] == '\r') {
simon 0:15611c7938a3 76 msg[i] = 0;
simon 0:15611c7938a3 77 return;
simon 0:15611c7938a3 78 }
simon 0:15611c7938a3 79 }
simon 0:15611c7938a3 80 error("Overflowed message limit");
simon 0:15611c7938a3 81 }