NEO-6M GPS shield with micro SD card together with UNO problem to solve

Dear Forum members hello,
Although i have read how to use this forum please forgive any amateurs mistakes.
I am new in Arduino world, last month i have purchase the shield above that seats above Uno.
So no cables of different length. One single power source at the moment from PC to Uno then through pins to Neo. Antenna is a ceramic type one, 8 cm apart. I have try all instructables on various sites but i can not have a fix, also at Neo shield the Green led is steady on and the red one (TP) flashing.
What i have to do to solve that issue and finally to receive a GPS fix?
Thank you in advance for any help.

First, I think that we need a link to the information on the GPS shield that you are using and we need to see the code that you are using (in code tags, please). Does your sketch output anything to the serial monitor. It would be useful to see a copy of some of the output.

GPS needs unobstructed view of the sky. Often won't work indoors. You may need to take it outside.

Hi gF and thanks for reply,

Please see the product link,

https://www.aliexpress.com/item/NEO-6M-u-Blox-NEO-6-GPS-Logger-Shield-SPI-UART-w-SD-Card-Slot-for/32833289557.html?spm=a2g0s.9042311.0.0.rsuTOJ

FYI i have tried outdoors without any success.

I will attach the code later today.

Thanks for the support.

When you post the code, can you also post a photo showing the UART jumper settings, please.

Please see attachments,
can i also post the code here?

FYI i have tried outdoors without any success.

Give it time and make sure that you have a clear view of the entire sky.

A brand new GPS can take over 15 minutes to get the first fix. In one case, I had to wait nearly an hour.

But i had never wait such long…
Many thanks for this information .
I will pluged when back home and i will wait such long to see.
Thanks again.

#include <SoftwareSerial.h>

#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of SoftwareSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/

TinyGPS gps;
SoftwareSerial ss(4, 5);

static void smartdelay(unsigned long ms);
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.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  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("-------------------------------------------------------------------------------------------------------------------------------------");

  ss.begin(4800);
}

void loop()
{
  float flat, flon;
  unsigned long age, date, time, chars = 0;
  unsigned short sentences = 0, failed = 0;
  static const double 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, 10, 6);
  print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6);
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
  print_date(gps);
  print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 7, 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 ? 0xFFFFFFFF : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
  print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? TinyGPS::GPS_INVALID_F_ANGLE : TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON), 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();
  
  smartdelay(1000);
}

static void smartdelay(unsigned long ms)
{
  unsigned long start = millis();
  do 
  {
    while (ss.available())
      gps.encode(ss.read());
  } while (millis() - start < ms);
}

static void print_float(float val, float invalid, int len, int prec)
{
  if (val == invalid)
  {
    while (len-- > 1)
      Serial.print('*');
    Serial.print(' ');
  }
  else
  {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1); // . and -
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i=flen; i<len; ++i)
      Serial.print(' ');
  }
  smartdelay(0);
}

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[i] = ' ';
  if (len > 0) 
    sz[len-1] = ' ';
  Serial.print(sz);
  smartdelay(0);
}

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);
  smartdelay(0);
}

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[i] : ' ');
  smartdelay(0);
}

On the attachment my result from serial monitor.

serial monitor in pdf

Untitled 1.pdf (95.2 KB)

No characters received, which means it is not working at all.

Modify your smartdelay function to print characters on the serial monitor:

static void smartdelay(unsigned long ms)
{
  char nextData;
  unsigned long start = millis();
  do
  {
    while (ss.available())
    nextData=ss.read();
    Serial.write(nextData);  //to print on the serial monitor
    gps.encode(nextData);
  } while (millis() - start < ms);
}

Where did you get that code and how exactly did you configure the board?

Post a link to the user guide or product manual.

SoftwareSerial ss(4, 5);

Your photo shows RX set to pin 7 and TX to pin 8. You need to have the constructor match the jumper setting.

Like:

SoftwareSerial ss(7, 8);
ss.begin(4800);

All the Neo-6M modules that I have seen are 9600 baud (default).

gF,i have modify as per your instructions,
bM, how i can modify modify smartdelay function? can you give me an example?
Thanks in advance

Images embedded for our convenience:

Technique described here.

serial monitor in pdf

Don't attach a PDF of a picture of your Serial Monitor text. Just select the text in the Serial Monitor window (press left mouse button at the start, drag to the end), and copy it (control C). Then paste it into your post (control V). Be sure to use code tags around it,

  so it looks
      like this

You can either type
** **[code]** **
before the test and
** **[/code]** **
after the text, or select the text and press the CODE button in the upper left corner (looks like "</>"). When you preview your post, you should see something like this:

Testing TinyGPS library v. 13
by Mikal Hart

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
-------------------------------------------------------------------------------------------------------------------------------------
**** **** ********* ********** **** ********** ******** **** ****** ****** ***** ***   *******  ****** ***   1     0         0        
**** **** ********* ********** **** ********** ******** **** ****** ****** ***** ***   *******  ****** ***   1     0         0        
**** **** ********* ********** **** ********** ******** **** ****** ****** ***** ***   *******  ****** ***   1     0         0        
**** **** ********* ********** **** ********** ******** **** ****** ****** ***** ***   *******  ****** ***   1     0         0        
**** **** ********* ********** **** ********** ******** **** ****** ****** ***** ***   *******  ****** ***   1     0         0

If you are not getting any characters, you may have the wrong baud rate, or you may not have it connected correctly.

groundFungus:
Your photo shows RX set to pin 7 and TX to pin 8. You need to have the constructor match the jumper setting.

Actually, these jumper blocks are offset from the Arduino data pins, so I think the OP was using pins 5 and 6.

I agree that the baud rate should be 9600, not 4800.

I would also recommend using my NeoSWSerial instead of SoftwareSerial:

    #include <NeoSWSerial.h>
    NeoSWSerial gpsPort( 5, 6 );

SoftwareSerial is very inefficient, because it disables interrupts for long periods of time. This can intefere with other parts of your sketch or with other libraries.

You might be interested in my NeoGPS library. It is smaller, faster, more reliable and more accurate than all other GPS libraries. It comes with a diagnostic program that would have tested other baud rates. The Installation and Troubleshooting pages also have lots of suggestions.

how i can modify modify smartdelay function?

Don't bother with smartDelay. It is a stupid function. It makes your Arduino do nothing while waiting for the GPS characters. If you try to modify this example to do something else, it will probably quit working. This is a very common problem with this kind of loop structure.

The NeoGPS examples are structured properly, and they allow your Arduino to do other things while the GPS characters are being received.

NeoGPS and NeoSWSerial are available from the Arduino Library Manager, under the menu Sketch-> Include Library-> Manage Libraries.

Cheers,
/dev

Actually, these jumper blocks are offset from the Arduino data pins, so I think the OP was using pins 5 and 6.

My assumption was that pins 0 and 1 were left for hw serial so the first jumper is pin 2. I have no evidence to corroborate my assumption. Easy enough to confirm with a DMM.

pins 0 and 1 were left for hw serial

Nope. You can see the traces on the right side of the 3rd image.

@dimi1, once you get things working on 5 & 6 (or whatever), you may want to move the jumper blocks to pins 0 & 1. It would be most efficient to use 0 & 1 for the GPS, but you'd have to remove the pin 0 jumper to upload a new sketch over USB. More info here.

how i can modify modify smartdelay function? can you give me an example?

Read reply #10 again, more carefully.

Right, missed that.

Gendleman, thank you for advices and comments, i will follow and i will keep you posted.
Thanks again.

Gens, we have try all possible solutions but it shows only empty lines.
I have allready order one more antenna and one more shield.
Soon as i have them i will try again.
Thanks for your support and i will keep you advised.
Dimi