help me GPS +ARDUINO+LCD

i build project gps neo starter kit with arduino +lcd but display show lot and lon 1000.0000 any solution ?

this is my code

#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <LiquidCrystal.h>
#include <stdlib.h>
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);

TinyGPS gps;
SoftwareSerial ss(0, 1);
static char buff[20];
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(9600);
lcd.begin(16, 2);
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(9600);
lcd.clear();
lcd.setCursor(3, 0);
lcd.println("INDRA BAGUS");
delay(5000);
lcd.clear();

}

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);
lcd.setCursor(0, 0);
lcd.println("LAT:");
lcd.setCursor(4, 0);
lcd.println(dtostrf(flat,10,5,buff));
print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6);
lcd.setCursor(0, 1);
lcd.println("LON:");
lcd.setCursor(4, 1);
lcd.println(dtostrf(flon,10,5,buff));
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);
}

sketch_dec31a.ino (4.26 KB)

SoftwareSerial ss(0, 1);

It does not make sense to do SoftwareSerial on the hardware serial pins. If you are not using them for talking to the PC, use Serial to talk to the GPS. Of course, using proper pins to talk to the GPS makes more sense, so you can use Serial to talk to the PC, for debugging purposes.

@indragusprakoso

You really should not cross-post, that is create two separate posts in the same sub-forum in an attempt to get an answer to the same question. The forum moderators will simply freak-out and scold you because it takes extra effort on their part to pull the separate posts together.

Generally, you should open a new thread when your previous thread has been answered and the new thread relates to a completely different thought or need.

Suggestion: Read those forum "stickies" at the top of each sub-forum on forum etiquette and basic rules of the road.

Ray

PaulS:

SoftwareSerial ss(0, 1);

It does not make sense to do SoftwareSerial on the hardware serial pins. If you are not using them for talking to the PC, use Serial to talk to the GPS. Of course, using proper pins to talk to the GPS makes more sense, so you can use Serial to talk to the PC, for debugging purposes.

what should i do ?

indragusprakoso:
what should i do ?

In all fairness, maybe working some of the supplied Examples in the Arduino installation? It is difficult to move into more advanced territory such as SoftwareSerial without understanding the physical UART in the uC. The analogy is learning to swim by jumping off the high-diving board in the deep end of the pool :fearful:

The UNO has one USART which is occupied by the serial-USB onboard. I looked it up here. The Mega has 4 USARTs... one dedicated to the USB-Serial and 3 for the user: Serial1, Serial2, and Serial3.

So, softwareserial is useful on the UNO (328p-pu) because the USART is already being used (but could be reused after programming...) For an UNO clone such as the Pro Mini, programming is done by an external serial-USB or via AVRISP. So, in the case of a home-brew or Pro Mini, SoftwareSerial is not usually needed.

You are stumbling a bit simply because you are not familiar with your product and the capabilities. Working through examples, doing a bit of web-searching for projects others have done, will give you the knowledge to understand the capabilities and the limitations of the board and what/why software is available to fill in the gaps in capabilities.

NOW, back to your question, what should you do? Use SoftwareSerial on other pins - just not the pins that are dedicated to the onboard serial-USB interface... that is, do not use pins 0, 1. You can look at some of the examples to see what pins others are using: Example

Ray

mrburnette:
In all fairness, maybe working some of the supplied Examples in the Arduino installation? It is difficult to move into more advanced territory such as SoftwareSerial without understanding the physical UART in the uC. The analogy is learning to swim by jumping off the high-diving board in the deep end of the pool :fearful:

The UNO has one USART which is occupied by the serial-USB onboard. I looked it up here. The Mega has 4 USARTs... one dedicated to the USB-Serial and 3 for the user: Serial1, Serial2, and Serial3.

So, softwareserial is useful on the UNO (328p-pu) because the USART is already being used (but could be reused after programming...) For an UNO clone such as the Pro Mini, programming is done by an external serial-USB or via AVRISP. So, in the case of a home-brew or Pro Mini, SoftwareSerial is not usually needed.

You are stumbling a bit simply because you are not familiar with your product and the capabilities. Working through examples, doing a bit of web-searching for projects others have done, will give you the knowledge to understand the capabilities and the limitations of the board and what/why software is available to fill in the gaps in capabilities.

NOW, back to your question, what should you do? Use SoftwareSerial on other pins - just not the pins that are dedicated to the onboard serial-USB interface... that is, do not use pins 0, 1. You can look at some of the examples to see what pins others are using: Example

Ray

still not working :frowning:

indragusprakoso:
still not working :frowning:

So, step back and simplify. Try to write a sketch to just read in the GPS using SoftwareSerial and echo it to the Serial-USB... That is, for display on PC using a terminal program like TeraTermPro (free).

These kinds of things happen often with serial devices... You do not know if the device is working correctly or if the code is broken. I finally got tired of it and designed this project

If you have a serial to USB cable (or module) then you can download free GPS test software.

Ray