programa para leer un GPS desde la FRDMKL25Z

Dependents:   pruebagps rastreador_satelital_2 ELJPGTarea_6

Fork of GPS by Simon Ford

Revision:
1:653fe36ca211
Parent:
0:15611c7938a3
--- a/GPS.cpp	Tue Jun 08 14:10:27 2010 +0000
+++ b/GPS.cpp	Fri Jun 06 04:04:46 2014 +0000
@@ -1,29 +1,9 @@
-/* mbed EM-406 GPS Module Library
- * Copyright (c) 2008-2010, sford
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
+
  
 #include "GPS.h"
 
 GPS::GPS(PinName tx, PinName rx) : _gps(tx, rx) {
-    _gps.baud(4800);    
+    _gps.baud(9600);    
     longitude = 0.0;
     latitude = 0.0;        
 }
@@ -36,13 +16,9 @@
     while(1) {        
         getline();
 
-        // Check if it is a GPGGA msg (matches both locked and non-locked msg)
+        // Chequear si en una trama GPGGA msg 
         if(sscanf(msg, "GPGGA,%f,%f,%c,%f,%c,%d", &time, &latitude, &ns, &longitude, &ew, &lock) >= 1) { 
-            if(!lock) {
-                longitude = 0.0;
-                latitude = 0.0;        
-                return 0;
-            } else {
+           
                 if(ns == 'S') {    latitude  *= -1.0; }
                 if(ew == 'W') {    longitude *= -1.0; }
                 float degrees = trunc(latitude / 100.0f);
@@ -52,7 +28,7 @@
                 minutes = longitude - (degrees * 100.0f);
                 longitude = degrees + minutes / 60.0f;
                 return 1;
-            }
+           
         }
     }
 }
@@ -60,7 +36,7 @@
 float GPS::trunc(float v) {
     if(v < 0.0) {
         v*= -1.0;
-        v = floor(v);
+        v = floor(v);  //floor devuelve el entero mas grande no mayor a v
         v*=-1.0;
     } else {
         v = floor(v);
@@ -69,12 +45,12 @@
 }
 
 void GPS::getline() {
-    while(_gps.getc() != '$');    // wait for the start of a line
+    while(_gps.getc() != '$');    // coje todo menos $
     for(int i=0; i<256; i++) {
-        msg[i] = _gps.getc();
-        if(msg[i] == '\r') {
+        msg[i] = _gps.getc();   //lo va gravando en la cadena msg[ ]
+        if(msg[i] == '\r') {   // si se encuentra retorno de carro le pone el null
             msg[i] = 0;
-            return;
+            return;   
         }
     }
     error("Overflowed message limit");