Gps

Published on February 2017 | Categories: Documents | Downloads: 46 | Comments: 0 | Views: 179
of 6
Download PDF   Embed   Report

Comments

Content

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);

date = tmp / 10000; month = (tmp / 100) % 100; year = tmp % 100; Serial.print("\nTime: "); Serial.print(hour, DEC); Serial.print(':'); Serial.print(minute, DEC); Serial.print(':'); Serial.println(second, DEC); Serial.print("Date: "); Serial.print(month, DEC); Serial.print('/'); Serial.print(date, DEC); Serial.print('/'); Serial.println(year, DEC); Serial.print("Lat: "); if (latdir == 'N') Serial.print('+'); else if (latdir == 'S') Serial.print('-'); Serial.print(latitude/1000000, DEC); Serial.print('\°', BYTE); Serial.print(' '); Serial.print((latitude/10000)%100, DEC); Serial.print('\''); Serial.print(' '); Serial.print((latitude%10000)*6/1000, DEC); Serial.print('.'); Serial.print(((latitude%10000)*6/10)%100, DEC); Serial.println('"'); Serial.print("Long: "); if (longdir == 'E') Serial.print('+'); else if (longdir == 'W') Serial.print('-'); Serial.print(longitude/1000000, DEC); Serial.print('\°', BYTE); Serial.print(' '); Serial.print((longitude/10000)%100, DEC); Serial.print('\''); Serial.print(' '); Serial.print((longitude%10000)*6/1000, DEC); Serial.print('.'); Serial.print(((longitude%10000)*6/10)%100, DEC); Serial.println('"'); } //Serial.println(buffer);

}

uint32_t parsedecimal(char *str) { uint32_t d = 0; while (str[0] != 0) { if ((str[0] > '9') || (str[0] < '0')) return d; d *= 10; d += str[0] - '0'; str++; } return d; } void readline(void) {

char c; buffidx = 0; // start at begninning while (1) { c=mySerial.read(); if (c == -1) continue; Serial.print(c); if (c == '\n') continue; if ((buffidx == BUFFSIZ-1) || (c == '\r')) { buffer[buffidx] = 0; return; } buffer[buffidx++]= c; } }

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close