GPS 03: Ephemeris improvement
This example shows the different time for connecting to satellites using ephemeris. Firstly, time elapsed is measured until GPS module is connected to satellites. Secondly, ephemeris are stored and loaded to the GPS module, and then time to connection is measured again to be compared with the first one.
Required Materials
1 x Waspmote 1 x Battery 1 x GPS module 1 x GPS antenna 1 x SD card
Notes
- Keep in mind that external antennas are not valid for indoor locations. - This example can be executed in Waspmote v12 and Waspmote v15 - The battery has to be connected.
Code
/*
* ------ [GPS_03] - Ephemeris improvement --------
*
* Explanation: This example shows the different time for connecting to
* satellites using ephemeris.
* Firstly, time elapsed is measured until GPS module is connected to
* satellites.
* Secondly, ephemeris are stored and loaded to the GPS module, and then
* time to connection is measured again to be compared with the first one.
*
* Copyright (C) 2017 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: 3.0
* Design: David Gascón
* Implementation: Eduardo Hernando
*/
#include <WaspGPS.h>
// define GPS timeout when connecting to satellites
// this time is defined in seconds (240sec = 4minutes)
#define TIMEOUT 240
// define status variable for GPS connection
bool status;
// variable to store running time
unsigned long previous=0;
void setup()
{
// open USB port
USB.ON();
// setup the GPS module
USB.println(F("GPS_03 example"));
// Inits SD pins
SD.ON();
// Turn GPS on
GPS.ON();
}
void loop()
{
///////////////////////////////////////
// 1. store execution time
///////////////////////////////////////
USB.println(F("GPS is not connected to satellites yet"));
previous=millis();
///////////////////////////////////////
// 2. wait for GPS signal for specific time
//////////////////////////////////////
status=GPS.waitForSignal(TIMEOUT);
if( status == true )
{
USB.println(F("Connected"));
// Time elapsed without ephemeris
USB.print(F("Time elapsed without ephemeris(ms): "));
USB.println(millis()-previous,DEC);
}
else
{
USB.println(F("GPS TIMEOUT. NOT connected"));
}
/////////////////////////////////////////////////////////////////////
// 3. if GPS is connected then store/load ephemeris to compare times
/////////////////////////////////////////////////////////////////////
if( status == true )
{
// store ephemeris in "EPHEM.TXT"
if( GPS.saveEphems() == 1 )
{
USB.println(F("Ephemeris stored successfully"));
// switch GPS off
GPS.OFF();
USB.println(F("GPS OFF"));
delay(5000);
// switch GPS on
GPS.ON();
USB.println(F("GPS ON"));
// store execution time
previous=millis();
// load ephemeris previously stored in SD
if( GPS.loadEphems() == 1 )
{
USB.println(F("Ephemeris loaded successfully"));
// wait until GPS is connected to satellites
status=GPS.waitForSignal(TIMEOUT);
if( status == true )
{
USB.println(F("Connected"));
}
else
{
USB.println(F("GPS TIMEOUT. NOT connected"));
}
// Time elapsed with ephemeris
USB.print(F("Time elapsed with ephemeris (ms): "));
USB.println(millis()-previous,DEC);
}
else
{
USB.println(F("Ephemeris load failed"));
}
}
else
{
USB.println(F("Ephemeris storing failed"));
}
}
/////////////////////////////////////////////////////////////////////
// 4. switch GPS off
/////////////////////////////////////////////////////////////////////
GPS.OFF();
SD.OFF();
USB.println(F("GPS OFF"));
delay(5000);
USB.println(F("-------------------"));
USB.println(RTC.getTime());
USB.println(F("-------------------"));
/////////////////////////////////////////////////////////////////////
// 5. switch GPS on
/////////////////////////////////////////////////////////////////////
GPS.ON();
SD.ON();
USB.println(F("GPS ON"));
}
Output
H#
GPS_03 example
GPS is not connected to satellites yet
Connected
Time elapsed without ephemeris(ms): 39045
Ephemeris stored successfully
GPS OFF
Last updated