GS407 GPS + Arduino Pro Mini doesnt work

Hi,
I have a GPS GS407 which is connected via SoftwareSerial using pins 2 and 3 of the Arduino Pro Mini 328 3.3V/8Mhz.
The GPS was first tested with the Arduino UNO where it worked flawlessly producing the latitude and longitude data.
I used the code from Jeremy Blum’s GPS Tutorial
http://www.jeremyblum.com/2012/07/16/tutorial-15-for-arduino-gps-tracking/
I have this code:

#include <SoftwareSerial.h>
#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
It uses an Arduino Mega with a GPS attached to serial_gps at 4800 buad.
*/
const int rxpin = 2;
const int txpin = 3;
SoftwareSerial serial_gps(rxpin, txpin);
TinyGPS gps;

static void gpsdump(TinyGPS &gps);
static bool feedgps();
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);

void setup()
{
Serial.begin(115200);
serial_gps.begin(9600);

Serial.println(“Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum”);
Serial.println(" (deg) (deg) Age Age (m) — from GPS ---- ---- to London ---- RX RX Fail");
Serial.println("--------------------------------------------------------------------------------------------------------------------------------------");
}

void loop()
{
bool newdata = false;
unsigned long start = millis();

// Every second we print an update
while (millis() - start < 1000)
{
if (feedgps())
newdata = true;
}

gpsdump(gps);
}

static void gpsdump(TinyGPS &gps)
{
float flat, flon;
unsigned long age, date, time, chars = 0;
unsigned short sentences = 0, failed = 0;
static const float LONDON_LAT = 51.508131, LONDON_LON = -0.128002;

print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
gps.f_get_position(&flat, &flon, &age);
print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 9, 5);
print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 10, 5);
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);

print_date(gps);

print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 8, 2);
print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0UL : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : TinyGPS::course_to(flat, flon, 51.508131, -0.128002), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);

gps.stats(&chars, &sentences, &failed);
print_int(chars, 0xFFFFFFFF, 6);
print_int(sentences, 0xFFFFFFFF, 10);
print_int(failed, 0xFFFFFFFF, 9);
Serial.println();
}

static void print_int(unsigned long val, unsigned long invalid, int len)
{
char sz[32];
if (val == invalid)
strcpy(sz, “*******”);
else
sprintf(sz, “%ld”, val);
sz[len] = 0;
for (int i=strlen(sz); i<len; ++i)
sz = ’ ';

  • if (len > 0)*
  • sz[len-1] = ’ ';*
  • Serial.print(sz);*
  • feedgps();*
    }
    static void print_float(float val, float invalid, int len, int prec)
    {
  • char sz[32];*
  • if (val == invalid)*
  • {*
    _ strcpy(sz, “*******”);_
  • sz[len] = 0;*
  • if (len > 0)*
  • sz[len-1] = ’ ';*
  • for (int i=7; i<len; ++i)*
    _ sz = ’ ';_
    * Serial.print(sz);*
    * }*
    * else*
    * {*
    * Serial.print(val, prec);*
    * int vi = abs((int)val);*
    * int flen = prec + (val < 0.0 ? 2 : 1);*
    * flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;*
    * for (int i=flen; i<len; ++i)*
    * Serial.print(" ");*
    * }*
    * feedgps();*
    }
    static void print_date(TinyGPS &gps)
    {
    * int year;*
    * byte month, day, hour, minute, second, hundredths;*
    * unsigned long age;*
    * gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
    if (age == TinyGPS::GPS_INVALID_AGE)
    _ Serial.print("****** ******* ");
    * else*
    * {*
    * char sz[32];*
    * sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ",*
    * month, day, year, hour, minute, second);*
    * Serial.print(sz);*
    * }*
    * print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
    _
    feedgps();*

    }
    static void print_str(const char str, int len)
    _
    {_
    _
    int slen = strlen(str);_
    _
    for (int i=0; i<len; ++i)_
    _ Serial.print(i<slen ? str : ’ ');
    feedgps();
    }
    static bool feedgps()
    {_
    while (serial_gps.available())
    _ {_
    if (gps.encode(serial_gps.read()))
    _ return true;
    }
    return false;
    }
    *_

****************************************************************************************************************
I am receiving this from the serial monitor:
which from what I understand is that I am receiving data but there is a checksum error. Does anybody know how I can fix this?

Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum
(deg) (deg) Age Age (m) --- from GPS ---- ---- to London ---- RX RX Fail

**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 0 0 0
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 0 0 0
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 0 0 0
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 0 0 0
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 0 0 0
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 0 0 0
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 151 0 0
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 304 0 1
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 456 0 2
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 607 0 2
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 758 0 3
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 909 0 3
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 1060 0 3
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 1212 0 5
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 1365 0 5
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 1516 0 5
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 1667 0 5
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 1818 0 6
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 1970 0 7
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 2121 0 7
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 2272 0 7
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 2423 0 7
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 2574 0 7
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 2726 0 8
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 2877 0 8
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 3028 0 8
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 3179 0 8
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 3330 0 10
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 3481 0 10
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 3633 0 10
**** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 3784 0 11

We are also having the same problem with the GS407 with Arduino Uno + TinyGPS library.
We get exactly the same message by the serial monitor.

Has anyway made the GS407 working at all?

Hello

Thé gs407 si working well. The think is that the sparkfun adabtator that you are using is bot well routed and the pin are not right