Go Down

Topic: NMEA Library (Read 5 times) previous topic - next topic

no clue

Hello Everyone,

I am having a bit of trouble using the NMEA library, http://www.maartenlamers.com/nmea/
If I include the library in any sketch, I get the error below.

In file included from ------------------\Documents\arduino-0015\hardware\cores\arduino/WProgram.h:4,

--documents/arduino-0015/hardware/tools/avr/lib/gcc/../../avr/include/stdlib.h:111: error: expected unqualified-id before 'int'

--documents/arduino-0015/hardware/tools/avr/lib/gcc/../../avr/include/stdlib.h:111: error: expected `)' before 'int'

--documents/arduino-0015/hardware/tools/avr/lib/gcc/../../avr/include/stdlib.h:111: error: expected `)' before 'int'

In file included from --Documents\arduino-0015\hardware\cores\arduino/WProgram.h:6,


I am pretty new to all this so I don't know what to do,
This is the sketch I have used to demonstrate my point,

#include <nmea.h>
void setup()
{}
void loop()
{}


If anyone knows why this is happening or has any ideas of how to fix it please post!!!
Thanks Everyone!

Oh and I have tried on arduino IDE 15 & 16; on 16 I get the exact same error.

CaptainObvious

I haven't tried the library you've provided, but I have used TinyGPS with results, maybe you will to?
http://arduiniana.org/libraries/TinyGPS

no clue

Yes I have tried that library, and it works, but the NMEA library has many extra features. Ones that I find very handy; for example, "distance to" and "course to". I think the error could be something wrong with the nmea.h file, does anyone know how i could fix this?

ruimmonteiro

#3
Dec 13, 2009, 07:02 pm Last Edit: Dec 13, 2009, 07:03 pm by ruimmonteiro Reason: 1
are you using the arduino mega? i'm not sure but i think it won't work on an duemilanove.

Any alternatives to tinygps , just for parsing lat/log? tks

no clue

Yes,
I have tried it on the mega, and duemilanove. I have receive the same error no matter what comination of arduino 0015/ arduino 0016, and arduino mega/ arduino duemilanove.

GorillaCoder

In nmea.h, after including WConstans.h, add
#undef abs
#undef random

wiring.h redefines some macros defined in standard c/c++ headers. When the "real" definitions are parsed, it barfs. The #undfines "fix" it.

no clue

Thanks!!!
OK so this is what the nmea.h file looks like now....


#ifndef nmea_h
#define nmea_h

#include "WConstants.h" #define#undef abs#undef random

but im still getting an error,
expected constructor, destructor, or type conversion before numeric constant


Im a real noob, did i do something wrong?

no clue

Nevermind, stupid mistake. Here is the working nmea.h file.
Thanks for everyone's help!

/*
 nmea.cpp - NMEA 0183 sentence decoding library for Wiring & Arduino
 Copyright (c) 2008 Maarten Lamers, The Netherlands.
 All right reserved.

 This library is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
 License as published by the Free Software Foundation; either
 version 2.1 of the License, or (at your option) any later version.

 This library 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
 Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public
 License along with this library; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/#ifndef nmea_h#define nmea_h#include "WConstants.h" #undef abs#undef random#define      ALL                              0                                                // connect to all datatypes
#define      GPRMC                        1                                                // connect only to GPRMC datatype
#define      MTR                              1.0                                          // meters per meter
#define      KM                              0.001                                    // kilometers per meter
#define      MI                              0.00062137112            // miles per meter
#define      NM                              0.00053995680            // nautical miles per meter
#define      PARSEC                  0.000000000000      // parsecs per meter (approximation)
#define      MPS                              0.51444444                   // meters-per-second in one knot
#define      KMPH                        1.852                                // kilometers-per-hour in one knot
#define      MPH                              1.1507794                        // miles-per-hour in one knot
#define      KTS                              1.0                                     // knots in one knot
#define      LIGHTSPEED      0.000000001716      // lightspeeds in one knot


class NMEA
{
 public:
           NMEA(int connect);                              // constructor for NMEA parser object; parse sentences of GPRMC or all datatypes.
           int            decode(char c);                        // parse one character received from GPS; returns 1 when full sentence found w/ checksum OK, 0 otherwise
           float      gprmc_utc();                              // returns decimal value of UTC term in last full GPRMC sentence
           char      gprmc_status();                        // returns status character in last full GPRMC sentence ('A' or 'V')
           float      gprmc_latitude();                  // signed degree-decimal value of latitude terms in last full GPRMC sentence
           float      gprmc_longitude();            // signed degree-decimal value of longitude terms in last full GPRMC sentence
           float      gprmc_speed(float unit);      // speed-on-ground term in last full GPRMC sentence
           float      gprmc_course();                        // track-angle-made-good term in last full GPRMC sentence
           float      gprmc_distance_to(float latitude, float longitude, float unit);      // returns distance from last-known GPRMC position to given position
           float gprmc_course_to(float latitude, float longitude);                  // returns initial course in degrees from last-known GPRMC position to given position            
           char*      sentence();                                    // returns last received full sentence as zero terminated string
           int            terms();                                          // returns number of terms (including data type and checksum) in last received full sentence
           char*      term(int t);                              // returns term t of last received full sentence as zero terminated string
           float      term_decimal(int t);      // returns the base-10 converted value of term[t] in last full sentence received
           int            libversion();                              // returns software version number of NMEA library
 private:
       // properties
           int            _gprmc_only;
           float      _gprmc_utc;
           char      _gprmc_status;
           float      _gprmc_lat;
           float      _gprmc_long;
           float      _gprmc_speed;
           float      _gprmc_angle;
           char      f_sentence[100];
           char*      f_term[30];
           int            f_terms;
           int            _terms;
           char      _sentence[100];
           char*      _term[30];
           int            n;
           int            _gprmc_tag;
           int            _state;
           int            _parity;
           int            _nt;
           float      _degs;
           // methods
           float distance_between (float lat1, float long1, float lat2, float long2, float units_per_meter);
           float      initial_course(float lat1, float long1, float lat2, float long2);
           int            _dehex(char a);
           float      _decimal(char* s);
};

#endif

Go Up