http://www.libelium.com/squidbee/index.php?title=GPS_module
/* * Copyright (C) 2008 Libelium Comunicaciones Distribuidas S.L. * http://www.libelium.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Version 0.1 * Author: Marcos Yarza <m.yarza [at] libelium [dot] com> */ // include the SoftwareSerial library #include <SoftwareSerial.h> // Constants #define rxPin 9 #define txPin 8 // set up the serial port SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin); // variables byte byteGPS = 0; int i = 0; int indices[13]; int cont = 0; int conta = 0;
char inBuffer[300] = ""; int k = 0; void setup(){ //setup for mySerial port pinMode(rxPin, INPUT); pinMode(txPin, OUTPUT); mySerial.begin(4800); //setup for Serial port Serial.begin(19200); // setup the GPS module Serial.println("Configurando GPS..."); delay(1000); mySerial.println("$PSTMNMEACONFIG,0,4800,1,1"); configure NMEA sentences to show only GGA sentence delay(100); // command for setting time and position mySerial.println("$PSTMINITGPS,4140.000,N,00053.000,W,0197,22,10, 2007,11,40,00"); // "4140.000,N" means: Latitude 41º40'00.0" North // "00053.000,W" means: Longitude 0º53'00.0" West // "0197" means 197 m elevation // "22,10,2007,11,40,00" means date and time (October 22, 2.007 11h 40min 00sec UTC time) } void loop(){ byteGPS = 0; i = 0; while(byteGPS != 42){ byteGPS = mySerial.read(); inBuffer[i]=byteGPS; i++; } k = 1; while(inBuffer[k] != 42){ Serial.print(inBuffer[k]);
//
// read the GGA sentence
// write the GGA sentence
k++; } Serial.println(); delay(3000); }
http://letsmakerobots.com/node/5972
// A simple sketch to read GPS data and parse the $GPRMC string // see http://www.ladyada.net/make/gpsshield for more info #include <NewSoftSerial.h> NewSoftSerial mySerial = #define powerpin 4 #define GPSRATE 4800 //#define GPSRATE 38400 // GPS parser for 406a #define BUFFSIZ 90 // plenty big char buffer[BUFFSIZ]; char *parseptr; char buffidx; uint8_t hour, minute, second, year, month, date; uint32_t latitude, longitude; uint8_t groundspeed, trackangle; char latdir, longdir; char status; void setup() { if (powerpin) { pinMode(powerpin, OUTPUT); } pinMode(13, OUTPUT); Serial.begin(GPSRATE); mySerial.begin(GPSRATE); // prints title with ending line break Serial.println("GPS parser"); digitalWrite(powerpin, LOW); } void loop() { uint32_t tmp; Serial.print("\n\rread: "); readline(); // pull low to turn on! NewSoftSerial(2, 3);
// check if $GPRMC (global positioning fixed data) if (strncmp(buffer, "$GPRMC",6) == 0) { // hhmmss time data parseptr = buffer+7; tmp = parsedecimal(parseptr); hour = tmp / 10000; minute = (tmp / 100) % 100; second = tmp % 100; parseptr = strchr(parseptr, ',') + 1; status = parseptr[0]; parseptr += 2; // grab latitude & long data // latitude latitude = parsedecimal(parseptr); if (latitude != 0) { latitude *= 10000; parseptr = strchr(parseptr, '.')+1; latitude += parsedecimal(parseptr); } parseptr = strchr(parseptr, ',') + 1; // read latitude N/S data if (parseptr[0] != ',') { latdir = parseptr[0]; } //Serial.println(latdir); // longitude parseptr = strchr(parseptr, ',')+1; longitude = parsedecimal(parseptr); if (longitude != 0) { longitude *= 10000; parseptr = strchr(parseptr, '.')+1; longitude += parsedecimal(parseptr); } parseptr = strchr(parseptr, ',')+1; // read longitude E/W data if (parseptr[0] != ',') { longdir = parseptr[0]; } // groundspeed parseptr = strchr(parseptr, ',')+1; groundspeed = parsedecimal(parseptr); // track angle parseptr = strchr(parseptr, ',')+1; trackangle = parsedecimal(parseptr); // date parseptr = strchr(parseptr, ',')+1; tmp = parsedecimal(parseptr);