mirror of
https://github.com/caperren/school_archives.git
synced 2025-11-10 06:01:13 +00:00
Added 2017-2018 mars rover repository.
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
#include <NeoGPS_cfg.h>
|
||||
#include <ublox/ubxNMEA.h>
|
||||
|
||||
//======================================================================
|
||||
// Program: PUBX.ino
|
||||
//
|
||||
// Description: This program parses NMEA proprietary messages from
|
||||
// ublox devices. It is an extension of NMEA.ino.
|
||||
//
|
||||
// Prerequisites:
|
||||
// 1) You have a ublox GPS device
|
||||
// 2) NMEA.ino works with your device
|
||||
// 3) You have installed ubxNMEA.H and ubxNMEA.CPP
|
||||
// 4) At least one NMEA standard or proprietary sentence has been enabled.
|
||||
// 5) Implicit Merging is disabled.
|
||||
//
|
||||
// Serial is for debug output to the Serial Monitor window.
|
||||
//
|
||||
// License:
|
||||
// Copyright (C) 2014-2017, SlashDevin
|
||||
//
|
||||
// This file is part of NeoGPS
|
||||
//
|
||||
// NeoGPS 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.
|
||||
//
|
||||
// NeoGPS 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 NeoGPS. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
//======================================================================
|
||||
|
||||
#include <GPSport.h>
|
||||
|
||||
#include <Streamers.h>
|
||||
|
||||
//------------------------------------------------------------
|
||||
// Check that the config files are set up properly
|
||||
|
||||
#if !defined( NMEAGPS_PARSE_GGA ) & !defined( NMEAGPS_PARSE_GLL ) & \
|
||||
!defined( NMEAGPS_PARSE_GSA ) & !defined( NMEAGPS_PARSE_GSV ) & \
|
||||
!defined( NMEAGPS_PARSE_RMC ) & !defined( NMEAGPS_PARSE_VTG ) & \
|
||||
!defined( NMEAGPS_PARSE_ZDA ) & !defined( NMEAGPS_PARSE_GST ) & \
|
||||
!defined( NMEAGPS_PARSE_PUBX_00 ) & !defined( NMEAGPS_PARSE_PUBX_04 )
|
||||
|
||||
#error No NMEA sentences enabled: no fix data available for fusing.
|
||||
|
||||
#endif
|
||||
|
||||
#if !defined( NMEAGPS_PARSE_PUBX_00 ) & !defined( NMEAGPS_PARSE_PUBX_04 )
|
||||
#error No PUBX messages enabled! You must enable one or more in ubxNMEA.h!
|
||||
#endif
|
||||
|
||||
#ifndef NMEAGPS_DERIVED_TYPES
|
||||
#error You must "#define NMEAGPS_DERIVED_TYPES" in NMEAGPS_cfg.h!
|
||||
#endif
|
||||
|
||||
#ifndef NMEAGPS_EXPLICIT_MERGING
|
||||
#error You must define NMEAGPS_EXPLICIT_MERGING in NMEAGPS_cfg.h
|
||||
#endif
|
||||
|
||||
#ifdef NMEAGPS_INTERRUPT_PROCESSING
|
||||
#error You must *NOT* define NMEAGPS_INTERRUPT_PROCESSING in NMEAGPS_cfg.h!
|
||||
#endif
|
||||
|
||||
//------------------------------------------------------------
|
||||
|
||||
static ubloxNMEA gps; // This parses received characters
|
||||
static gps_fix merged;
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
static void poll()
|
||||
{
|
||||
#if defined( NMEAGPS_PARSE_PUBX_00 )
|
||||
gps.send_P( &gpsPort, F("PUBX,00") );
|
||||
#endif
|
||||
#if defined( NMEAGPS_PARSE_PUBX_04 )
|
||||
gps.send_P( &gpsPort, F("PUBX,04") );
|
||||
#endif
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
static void doSomeWork()
|
||||
{
|
||||
// Print all the things!
|
||||
trace_all( DEBUG_PORT, gps, merged );
|
||||
|
||||
// Ask for the proprietary messages again
|
||||
poll();
|
||||
|
||||
} // doSomeWork
|
||||
|
||||
//------------------------------------
|
||||
|
||||
static void GPSloop()
|
||||
{
|
||||
while (gps.available( gpsPort )) {
|
||||
merged = gps.read();
|
||||
|
||||
doSomeWork();
|
||||
}
|
||||
} // GPSloop
|
||||
|
||||
//--------------------------
|
||||
|
||||
void setup()
|
||||
{
|
||||
DEBUG_PORT.begin(9600);
|
||||
while (!DEBUG_PORT)
|
||||
;
|
||||
|
||||
DEBUG_PORT.print( F("PUBX: started\n") );
|
||||
DEBUG_PORT.print( F("fix object size = ") );
|
||||
DEBUG_PORT.println( sizeof(gps.fix()) );
|
||||
DEBUG_PORT.print( F("ubloxNMEA object size = ") );
|
||||
DEBUG_PORT.println( sizeof(gps) );
|
||||
DEBUG_PORT.println( F("Looking for GPS device on " GPS_PORT_NAME) );
|
||||
|
||||
#ifndef NMEAGPS_PARSE_PUBX_00
|
||||
if (LAST_SENTENCE_IN_INTERVAL == (NMEAGPS::nmea_msg_t) ubloxNMEA::PUBX_00) {
|
||||
DEBUG_PORT.println( F("ERROR! LAST_SENTENCE_IN_INTERVAL PUBX_00 not enabled!\n"
|
||||
" Either change LAST_SENTENCE or enable PUBX_00") );
|
||||
for(;;);
|
||||
}
|
||||
#endif
|
||||
#ifndef NMEAGPS_PARSE_PUBX_04
|
||||
if (LAST_SENTENCE_IN_INTERVAL == (NMEAGPS::nmea_msg_t) ubloxNMEA::PUBX_04) {
|
||||
DEBUG_PORT.println( F("ERROR! LAST_SENTENCE_IN_INTERVAL PUBX_04 not enabled!\n"
|
||||
" Either change LAST_SENTENCE or enable PUBX_04") );
|
||||
for(;;);
|
||||
}
|
||||
#endif
|
||||
|
||||
trace_header( DEBUG_PORT );
|
||||
DEBUG_PORT.flush();
|
||||
|
||||
gpsPort.begin(9600);
|
||||
|
||||
// Ask for the special PUBX sentences
|
||||
poll();
|
||||
}
|
||||
|
||||
//--------------------------
|
||||
|
||||
void loop()
|
||||
{
|
||||
GPSloop();
|
||||
}
|
||||
Reference in New Issue
Block a user