LCD only display the 1st time , doesn't changes

Hi all , I'm currently using Arduino UNO R3 , Cytron's SMK53 GPS shield and DFRobot's L298P shield v1.2 for my project . Both its original written code can be found at http://tutorial.cytron.com.my/2015/03/11/using-cytron-skm53-gps-shield-with-ct-uno/ and Arduino_Motor_Shield__L298N___SKU_DRI0009_-DFRobot

I had a SLIGHT idea about PWM , but I'm have no clue for what PLL does for the motor shield part even after reading the wiki . However , on my mini project I'm using PLL .

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

LiquidCrystal lcd(8,9,13,12,11,10); //Pin initialization for LCD
SoftwareSerial ss(2,3); //Software serial pin for SKM53 shield
TinyGPS gps;

//const int ButtonKey=A0; //Button pin for LCD keypad shield
boolean NewData=false;
boolean State=0;
float flat;
float flon;
float InitialLatitude=3.0635199546; //Latitude (horizontal line) above (North side;+ve) the equator
float InitialLongitude=101.61813354; //Longitde (vertical line) to the right (East side;+ve) of prime meridian 

int E1=6; //Direction control for motor 1
int E2=5; //Direction control for motor 2
int M1=7; //Enable control for motor 1
int M2=4; //Enable control for motor 2
String IncomingCommand ;

void setup(){
  //pinMode(ButtonKey,INPUT);
  lcd.begin(16,2);
  lcd.print("Acquiring GPS ......");
  ss.begin(9600);
  //Serial.begin(9600);
  pinMode(E1,OUTPUT);
  pinMode(E2,OUTPUT);
  pinMode(M1,OUTPUT);
  pinMode(M2,OUTPUT);
}

void loop(){
  GetGPSPosition();
  PrintPositionOnLCD();
  EastSideGliding();
  WestSideGliding(); 
}

void GetGPSPosition(){
  while(ss.available()){
    char c=ss.read();

    if(gps.encode(c)){
      NewData=true;
      gps.f_get_position(&flat,&flon);
    }
  }
}

void PrintPositionOnLCD(){
  if(NewData){
    lcd.clear();

    if(State==0){
      lcd.setCursor(0,0);
      lcd.print("Lat ");
      lcd.setCursor(4,0); //Print position (x,y)
      lcd.print(flat,10); //(......,precision)
  
      lcd.setCursor(0,1);
      lcd.print("Lon ");
      lcd.setCursor(4,1);
      lcd.print(flon,10);
    }

    //NewData=false;
    delay(1000); //Refresh time
  }
}

//Set parachute to glide to the East side
void EastSideGliding(){
  if(NewData){
    if(flon<InitialLongitude){
      int i=1;
    
      while(flon<InitialLongitude){
        digitalWrite(M1,LOW);
        digitalWrite(M2,HIGH);
        analogWrite(E2,255);
        delay(3000);
        digitalWrite(M2,LOW);
        i=i+1;
    
        delay(10000); //Let parachute glide for 10s
  
        GetGPSPosition();
        PrintPositionOnLCD();

        NewData=false;
        
        if(flon==InitialLongitude){
          digitalWrite(M1,LOW);
          digitalWrite(M2,HIGH);
          analogWrite(E2,0);
          delay(i*3000);
          digitalWrite(M2,LOW);
          break;
        }
      }
    }
  }
}

//Set parachute to glide to the West side
void WestSideGliding(){
  if(NewData){
    if(flon>InitialLongitude){
      int i=1;
    
      while(flon>InitialLongitude){
        digitalWrite(M1,HIGH);
        digitalWrite(M2,LOW);
        analogWrite(E1,255);
        delay(3000);
        digitalWrite(M1,LOW);
        i=i+1;
    
        delay(10000); //Let parachute glide for 10s
  
        GetGPSPosition();
        PrintPositionOnLCD();

        NewData=false;
        
        if(flon==InitialLongitude){
          digitalWrite(M1,HIGH);
          digitalWrite(M2,LOW);
          analogWrite(E1,0);
          delay(i*3000);
          digitalWrite(M1,LOW);
          break;
        }
      }
    }
  }
}

/*
void CommandFromSerialMonitorToMotor(){
  while(Serial.available()==0){
  }

  IncomingCommand=Serial.readString();

  //Forward movement for both motors
  if(IncomingCommand=="Q"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,HIGH);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }
  else if(IncomingCommand=="W"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }

  //Backward movement for both motors
  if(IncomingCommand=="A"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,HIGH);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
  else if(IncomingCommand=="S"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }

  //Forward movement for motor 1
  if(IncomingCommand=="E"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }
  else if(IncomingCommand=="R"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }

  //Backward movement for motor 1
  if(IncomingCommand=="D"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
  else if(IncomingCommand=="F"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }

  //Forward movement for motor 2
  if(IncomingCommand=="T"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,HIGH);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }
  else if(IncomingCommand=="Y"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }

  //Backward movement for motor 2
  if(IncomingCommand=="G"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,HIGH);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
  else if(IncomingCommand=="H"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
}
*/

This is code I modified . Currently , I'm only working on longitude part with 1 Tamiya gearbox (My mini project will have 2 Tamiya gearbox with 2 motors in 1 gearbox operating on latitude part and 2 more motors in another gearbox operating on longitude part , I'm still in the testing phase .)

From the original codes , I understand FULLY WELL for the motor shield one but not really the GPS shield one as it include some library file which I'm not familiar with it . So , most of my GPS code I just followed the original one .

The overall of this written code will be like this (or at least planned to be like this) . Firstly , it will get the latitude and longitude position at my standing position . Then , it will show the latitude and longitude data on the LCD for my current position . IF ONLY the GPS position is present , the motor will move (for now is only on longitude side) base on the detected position and my initial position .

I still can't tell whether my motor rotated correctly based on my code as the data for the GPS position only shows the 1st detected position on my LCD . After that , even though I placed the when it is in the GetGPSPosition() and the PrintPositionOnLCD() functions inside the while loop , it doesn't overwrite the 1st data to the latest one .

I personally think that there is some error around here but still couldn't figure where and how to fix it . The NewData variable smells fishy to me .

//Set parachute to glide to the East side
void EastSideGliding(){
  if(NewData){
    if(flon<InitialLongitude){
      int i=1;
    
      while(flon<InitialLongitude){
        digitalWrite(M1,LOW);
        digitalWrite(M2,HIGH);
        analogWrite(E2,255);
        delay(3000);
        digitalWrite(M2,LOW);
        i=i+1;
    
        delay(10000); //Let parachute glide for 10s
  
        GetGPSPosition();
        PrintPositionOnLCD();

        NewData=false;

Help is really appreciated :slight_smile: . Thank you !

Use attached modified code - added Serial and Serial.println - AND POST EXACT serial monitor output

[code]

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

LiquidCrystal lcd(8, 9, 13, 12, 11, 10); //Pin initialization for LCD
SoftwareSerial ss(2, 3); //Software serial pin for SKM53 shield
TinyGPS gps;

//const int ButtonKey=A0; //Button pin for LCD keypad shield
boolean NewData = false;
boolean State = 0;
float flat;
float flon;
float InitialLatitude = 3.0635199546; //Latitude (horizontal line) above (North side;+ve) the equator
float InitialLongitude = 101.61813354; //Longitde (vertical line) to the right (East side;+ve) of prime meridian

int E1 = 6; //Direction control for motor 1
int E2 = 5; //Direction control for motor 2
int M1 = 7; //Enable control for motor 1
int M2 = 4; //Enable control for motor 2
String IncomingCommand ;

void setup() {
Serial.println(__func__);
  //pinMode(ButtonKey,INPUT);
  lcd.begin(16, 2);
  lcd.print("Acquiring GPS ......");
  ss.begin(9600);
  Serial.begin(9600);
  pinMode(E1, OUTPUT);
  pinMode(E2, OUTPUT);
  pinMode(M1, OUTPUT);
  pinMode(M2, OUTPUT);
Serial.println(__func__);
}

void loop() {
Serial.println(__func__);
  GetGPSPosition();
  Serial.println("GetGPSPosition();");
  PrintPositionOnLCD();
  Serial.println("PrintPositionOnLCD();");
  EastSideGliding();
  Serial.println("EastSideGliding();");
  WestSideGliding();
  Serial.println("WestSideGliding();");
  delay(5000);
Serial.println(__func__);
}

void GetGPSPosition() {
Serial.println(__func__);
  while (ss.available()) {
    char c = ss.read();
    if (gps.encode(c)) {
      NewData = true;
      gps.f_get_position(&flat, &flon);
    }
  }
Serial.println(__func__);
}

void PrintPositionOnLCD() {
Serial.println(__func__);

  if (NewData) {
    lcd.clear();
    if (State == 0) {
      lcd.setCursor(0, 0);
      lcd.print("Lat ");
      lcd.setCursor(4, 0); //Print position (x,y)
      lcd.print(flat, 10); //(......,precision)
      lcd.setCursor(0, 1);
      lcd.print("Lon ");
      lcd.setCursor(4, 1);
      lcd.print(flon, 10);
    }
    //NewData=false;
    delay(1000); //Refresh time
  }
Serial.println(__func__);
}

//Set parachute to glide to the East side
void EastSideGliding() {
Serial.println(__func__);
  if (NewData) {
    if (flon < InitialLongitude) {
      int i = 1;
      while (flon < InitialLongitude) {
        digitalWrite(M1, LOW);
        digitalWrite(M2, HIGH);
        analogWrite(E2, 255);
        delay(3000);
        digitalWrite(M2, LOW);
        i = i + 1;
        delay(10000); //Let parachute glide for 10s
        GetGPSPosition();
        PrintPositionOnLCD();
        NewData = false;
        if (flon == InitialLongitude) {
          digitalWrite(M1, LOW);
          digitalWrite(M2, HIGH);
          analogWrite(E2, 0);
          delay(i * 3000);
          digitalWrite(M2, LOW);
          break;
        }
      }
    }
  }
Serial.println(__func__);
}

//Set parachute to glide to the West side
void WestSideGliding() {
Serial.println(__func__);
  if (NewData) {
    if (flon > InitialLongitude) {
      int i = 1;
      while (flon > InitialLongitude) {
        digitalWrite(M1, HIGH);
        digitalWrite(M2, LOW);
        analogWrite(E1, 255);
        delay(3000);
        digitalWrite(M1, LOW);
        i = i + 1;
        delay(10000); //Let parachute glide for 10s
        GetGPSPosition();
        PrintPositionOnLCD();
        NewData = false;
        if (flon == InitialLongitude) {
          digitalWrite(M1, HIGH);
          digitalWrite(M2, LOW);
          analogWrite(E1, 0);
          delay(i * 3000);
          digitalWrite(M1, LOW);
          break;
        }
      }
    }
  }
Serial.println(__func__);
}

/*
  void CommandFromSerialMonitorToMotor(){
  while(Serial.available()==0){
  }

  IncomingCommand=Serial.readString();

  //Forward movement for both motors
  if(IncomingCommand=="Q"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,HIGH);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }
  else if(IncomingCommand=="W"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }

  //Backward movement for both motors
  if(IncomingCommand=="A"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,HIGH);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
  else if(IncomingCommand=="S"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }

  //Forward movement for motor 1
  if(IncomingCommand=="E"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }
  else if(IncomingCommand=="R"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }

  //Backward movement for motor 1
  if(IncomingCommand=="D"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
  else if(IncomingCommand=="F"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }

  //Forward movement for motor 2
  if(IncomingCommand=="T"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,HIGH);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }
  else if(IncomingCommand=="Y"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }

  //Backward movement for motor 2
  if(IncomingCommand=="G"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,HIGH);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
  else if(IncomingCommand=="H"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
  }
*/

[/code]

Serial.println(__func__);

May I ask what does the func meant ? I thought Serial.println() command is use to print on serial monitor , isn't it ? How does that link to here ?

Also do I have to turn on Serial.begin(9600) again ? I thought that I had already turn it on with ss.begin(9600) .

juniorlcq:

Serial.println(__func__);

May I ask what does the func meant ? I thought Serial.println() command is use to print on serial monitor , isn't it ? How does that link to here ?

Also do I have to turn on Serial.begin(9600) again ? I thought that I had already turn it on with ss.begin(9600) .

You did "turn on" SoftwareSerial , not Serial.
And the proper term is "creating an instance of class".
Or you can say "construct / instantiate class Serial".

Using macro "func" as a parameter to Serial lets you print the function where the command "Serial.print(func); is used.
In "Setup" it will print "Setup", thus giving you a trace of the code being executed and than it will trace the code into each function.
The idea is to further identify / verify the flow of your code and possibly find where it gets "stuck".

setup
loop
GetGPSPosition
GetGPSPosition
GetGPSPosition();
PrintPositionOnLCD
PrintPositionOnLCD
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding();
WestSideGliding
WestSideGliding
WestSideGliding();
loop
loop
GetGPSPosition
GetGPSPosition
GetGPSPosition();
PrintPositionOnLCD
PrintPositionOnLCD
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding();
WestSideGliding
WestSideGliding
WestSideGliding();
loop
loop
GetGPSPosition
GetGPSPosition
GetGPSPosition();
PrintPositionOnLCD
PrintPositionOnLCD
PrintPositionOnLCD();

Everything seems fine to me . But the LCD still doesn't showing . In fact right now it sometimes , it the proper position set to show on the LCD shifts its position and shows funny weird symbols .

However I do test that in indoor my flon reading can be 0.00 even with the while(ss.available){} loop present . Is this wrong ?

I think you need to do some more testing with serial printing

from what you printed from vals test it shows that both EastSideGliding and WestSideGliding failed (did not get to the while statement)

as both require

while(flon>InitialLongitude){
while(flon<InitialLongitude){

one should have worked so the if before this must not have been satisfied

if(NewData){

so my guess is this is never true

a few other things that seem odd are

if(State==0){

theres no other refrence to state other than boolean State=0;

the lcd is using pin 13 which can cause problems as that has a led built in

I have never used a gps shield so im not sure whats really happening but im sure that adding serial prints you will be able to find out

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

LiquidCrystal lcd(8,9,13,12,11,10); //Pin initialization for LCD
SoftwareSerial ss(2,3); //Software serial pin for SKM53 shield
TinyGPS gps;

boolean NewData=false;
float flat;
float flon;
float InitialLatitude=3.0635199546; //Latitude (horizontal line) above (North side;+ve) the equator
float InitialLongitude=101.61813354; //Longitde (vertical line) to the right (East side;+ve) of prime meridian 

int E1=6; //Direction control for motor 1
int E2=5; //Direction control for motor 2
int M1=7; //Enable control for motor 1
int M2=4; //Enable control for motor 2
//String IncomingCommand ;

void setup(){
  Serial.println(__func__);
  lcd.begin(16,2);
  lcd.print("Acquiring GPS ......");
  ss.begin(9600);
  Serial.begin(9600);
  pinMode(E1,OUTPUT);
  pinMode(E2,OUTPUT);
  pinMode(M1,OUTPUT);
  pinMode(M2,OUTPUT);
  Serial.println(__func__);
}

void loop(){
  Serial.println(__func__);
  GetGPSPosition();
  Serial.println("GetGPSPosition();");
  PrintPositionOnLCD();
  Serial.println("PrintPositionOnLCD();");
  EastSideGliding();
  Serial.println("EastSideGliding();");
  WestSideGliding();
  Serial.println("WestSideGliding();"); 
  Serial.println(__func__);
}

void GetGPSPosition(){
  Serial.println(__func__);
  while(ss.available()){
    char c=ss.read();

    if(gps.encode(c)){
      NewData=true;
      gps.f_get_position(&flat,&flon);
    }
  }
  Serial.println(__func__);
}

void PrintPositionOnLCD(){
  Serial.println(__func__);
  if(NewData==true){
    lcd.clear();

    lcd.setCursor(0,0);
    lcd.print("Lat ");
    lcd.setCursor(4,0); //Print position (x,y)
    lcd.print(flat,10); //(......,precision)
  
    lcd.setCursor(0,1);
    lcd.print("Lon ");
    lcd.setCursor(4,1);
    lcd.print(flon,10);

    delay(1000); //Refresh time
  }
  Serial.println(__func__);
}

//Set parachute to glide to the East side
void EastSideGliding(){
  Serial.println(__func__);
  if(NewData==true){
    if(flon<InitialLongitude){
      int i=1;
      NewData=false;
     
      while(flon<InitialLongitude){
        digitalWrite(M1,LOW);
        digitalWrite(M2,HIGH);
        analogWrite(E2,255);
        delay(3000);
        digitalWrite(M2,LOW);
        i=i+1;
    
        delay(10000); //Let parachute glide for 10s
  
        GetGPSPosition();
        PrintPositionOnLCD();

        NewData=false;
        
        if(flon==InitialLongitude){
          digitalWrite(M1,LOW);
          digitalWrite(M2,HIGH);
          analogWrite(E2,0);
          delay(i*3000);
          digitalWrite(M2,LOW);
          break;
        }
      }
    }
  }
  Serial.println(__func__);
}

//Set parachute to glide to the West side
void WestSideGliding(){
  Serial.println(__func__);
  if(NewData==true){
    if(flon>InitialLongitude){
      int i=1;
      NewData=false;
    
      while(flon>InitialLongitude){
        digitalWrite(M1,HIGH);
        digitalWrite(M2,LOW);
        analogWrite(E1,255);
        delay(3000);
        digitalWrite(M1,LOW);
        i=i+1;
    
        delay(10000); //Let parachute glide for 10s
  
        GetGPSPosition();
        PrintPositionOnLCD();

        NewData=false;
        
        if(flon==InitialLongitude){
          digitalWrite(M1,HIGH);
          digitalWrite(M2,LOW);
          analogWrite(E1,0);
          delay(i*3000);
          digitalWrite(M1,LOW);
          break;
        }
      }
    }
  }
  Serial.println(__func__);
}

/*
void CommandFromSerialMonitorToMotor(){
  while(Serial.available()==0){
  }

  IncomingCommand=Serial.readString();

  //Forward movement for both motors
  if(IncomingCommand=="Q"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,HIGH);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }
  else if(IncomingCommand=="W"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }

  //Backward movement for both motors
  if(IncomingCommand=="A"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,HIGH);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
  else if(IncomingCommand=="S"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }

  //Forward movement for motor 1
  if(IncomingCommand=="E"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }
  else if(IncomingCommand=="R"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }

  //Backward movement for motor 1
  if(IncomingCommand=="D"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
  else if(IncomingCommand=="F"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }

  //Forward movement for motor 2
  if(IncomingCommand=="T"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,HIGH);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }
  else if(IncomingCommand=="Y"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }

  //Backward movement for motor 2
  if(IncomingCommand=="G"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,HIGH);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
  else if(IncomingCommand=="H"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
}
*/

From what you had mentioned , if my flon=0.00 I should have expected the serial monitor only shows EastSideGliding . I changed to from if(NewData) to if(NewData==true) . The while loop still doesn't kept going .

Pr
setup
loop
GetGPSPosition
GetGPSPosition
GetGPSPosition();
PrintPositionOnLCD
PrintPositionOnLCD
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding();
WestSideGliding
WestSideGliding
WestSideGliding();
loop
loop
GetGPSPosition
GetGPSPosition
GetGPSPosition();
PrintPositionOnLCD
PrintPositionOnLCD
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding();
WestSideGliding
WestSideGliding
WestSideGliding();
loop
loop
GetGPSPosition
GetGPSPosition
GetGPSPosition();
PrintPositionOnLCD
PrintPositionOnLCD
PrintPositionOnLCD();

The State is actually from the original code where if its 0 it will show latitude and longitude display and if it is 1 it will show times and other stuff . I had removed it since it doesn't apply here .

gpop1:
the lcd is using pin 13 which can cause problems as that has a led built in

I have never used a gps shield so im not sure whats really happening but im sure that adding serial prints you will be able to find out

Has a LED built in ?

add a serial print to see what newdata is doing.
Also try a simple lcd sketch like hello world using the same pin numbers to see if theres a problem with using pin 13 (im not sure if there is as I avoid using that pin for carrying data so ive never tried it)

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

LiquidCrystal lcd(8,9,13,12,11,10); //Pin initialization for LCD
SoftwareSerial ss(2,3); //Software serial pin for SKM53 shield
TinyGPS gps;

boolean NewData=false;
float flat;
float flon;
float InitialLatitude=3.0635199546; //Latitude (horizontal line) above (North side;+ve) the equator
float InitialLongitude=101.61813354; //Longitde (vertical line) to the right (East side;+ve) of prime meridian 

int E1=6; //Direction control for motor 1
int E2=5; //Direction control for motor 2
int M1=7; //Enable control for motor 1
int M2=4; //Enable control for motor 2
//String IncomingCommand ;

void setup(){
  lcd.begin(16,2);
  lcd.print("Acquiring GPS ......");
  ss.begin(9600);
  Serial.begin(9600);
  pinMode(E1,OUTPUT);
  pinMode(E2,OUTPUT);
  pinMode(M1,OUTPUT);
  pinMode(M2,OUTPUT);
}

void loop(){
  Serial.println(__func__);
  GetGPSPosition();
  Serial.println("GetGPSPosition();");
  PrintPositionOnLCD();
  Serial.println("PrintPositionOnLCD();");
  EastSideGliding();
  Serial.println("EastSideGliding();");
  WestSideGliding();
  Serial.println("WestSideGliding();"); 
  Serial.println(__func__);
}

void GetGPSPosition(){
  while(ss.available()){
    char c=ss.read();

    if(gps.encode(c)){
      NewData=true;
      gps.f_get_position(&flat,&flon);
    }
  }
}

void PrintPositionOnLCD(){
  if(NewData==true){
    lcd.clear();

    lcd.setCursor(0,0);
    lcd.print("Lat ");
    lcd.setCursor(4,0); //Print position (x,y)
    lcd.print(flat,10); //(......,precision)
 
    lcd.setCursor(0,1);
    lcd.print("Lon ");
    lcd.setCursor(4,1);
    lcd.print(flon,10);

    delay(1000); //Refresh time
  }
}

//Set parachute to glide to the East side
void EastSideGliding(){
  Serial.println(__func__);
  if(NewData==true){Serial.println(__func__);
    if(flon<InitialLongitude){
      int i=1;
      NewData=false;
     Serial.println(__func__);
      while(flon<InitialLongitude){
        digitalWrite(M1,LOW);
        digitalWrite(M2,HIGH);
        analogWrite(E2,255);
        delay(3000);
        digitalWrite(M2,LOW);
        i=i+1;
    Serial.println(__func__);
        delay(10000); //Let parachute glide for 10s
  
        GetGPSPosition();
        PrintPositionOnLCD();

        NewData=false;
        Serial.println(__func__);
        if(flon==InitialLongitude){Serial.println(__func__);
          digitalWrite(M1,LOW);
          digitalWrite(M2,HIGH);
          analogWrite(E2,0);
          delay(i*3000);
          digitalWrite(M2,LOW);
          break;
        }
      }
    }
  }
  Serial.println(__func__);
}

//Set parachute to glide to the West side
void WestSideGliding(){
  Serial.println(__func__);
  if(NewData==true){Serial.println(__func__);
    if(flon>InitialLongitude){
      int i=1;
      NewData=false;
    Serial.println(__func__);
      while(flon>InitialLongitude){
        digitalWrite(M1,HIGH);
        digitalWrite(M2,LOW);
        analogWrite(E1,255);
        delay(3000);
        digitalWrite(M1,LOW);
        i=i+1;
    Serial.println(__func__);
        delay(10000); //Let parachute glide for 10s
  
        GetGPSPosition();
        PrintPositionOnLCD();

        NewData=false;
        Serial.println(__func__);
        if(flon==InitialLongitude){Serial.println(__func__);
          digitalWrite(M1,HIGH);
          digitalWrite(M2,LOW);
          analogWrite(E1,0);
          delay(i*3000);
          digitalWrite(M1,LOW);
          break;
        }
      }
    }
  }
  Serial.println(__func__);
}

/*
void CommandFromSerialMonitorToMotor(){
  while(Serial.available()==0){
  }

  IncomingCommand=Serial.readString();

  //Forward movement for both motors
  if(IncomingCommand=="Q"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,HIGH);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }
  else if(IncomingCommand=="W"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }

  //Backward movement for both motors
  if(IncomingCommand=="A"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,HIGH);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
  else if(IncomingCommand=="S"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }

  //Forward movement for motor 1
  if(IncomingCommand=="E"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }
  else if(IncomingCommand=="R"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }

  //Backward movement for motor 1
  if(IncomingCommand=="D"){
    digitalWrite(M1,HIGH);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
  else if(IncomingCommand=="F"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }

  //Forward movement for motor 2
  if(IncomingCommand=="T"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,HIGH);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }
  else if(IncomingCommand=="Y"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,255);
    analogWrite(E2,255);
  }

  //Backward movement for motor 2
  if(IncomingCommand=="G"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,HIGH);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
  else if(IncomingCommand=="H"){
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    analogWrite(E1,0);
    analogWrite(E2,0);
  }
}
*/

I checked with the print command . The while loop is actually doing is job . I tried putting in between the while loop and here's what I got . Both while loop in EastSideGliding and WestSideGlinding turns out fine actually . But I just got a serial monitor for West side .

loop
GetGPSPosition();
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding();
WestSideGliding
WestSideGliding
WestSideGliding();
loop
loop
GetGPSPosition();
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding();
WestSideGliding
WestSideGliding
WestSideGliding();
loop
loop
GetGPSPosition();
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding();
WestSideGliding
WestSideGliding
WestSideGliding();
loop
loop
GetGPSPosition();
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding
EastSideGliding();
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding
WestSideGliding

The above is same for East side gliding . However the LCD DOES NOT update itself frequently . It normally takes approximately 5 minutes for the GPS to get its 1st data as it need to synchronize with 4 satellites . And from Cytron it says it will update every new data after that initial long waiting duration .

loop
GetGPSPosition();
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding();
WestSideGliding
WestSideGliding
WestSideGliding();
loop
loop
GetGPSPosition();
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding();
WestSideGliding
WestSideGliding
WestSideGliding();
loop
loop
GetGPSPosition();
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302

The code is the same above my previous reply . I tried to see the flon value , it doesn't changes inside the while loop .

I tried running only this part of the code and the GPS position doesn't get updated .

  while(ss.available()){
    char c=ss.read();

    if(gps.encode(c)){
      NewData=true;
      gps.f_get_position(&flat,&flon);
    }
  }
  
  if(NewData==true){
    lcd.clear();

    lcd.setCursor(0,0);
    lcd.print("Lat ");
    lcd.setCursor(4,0); //Print position (x,y)
    lcd.print(flat,10); //(......,precision)
 
    lcd.setCursor(0,1);
    lcd.print("Lon ");
    lcd.setCursor(4,1);
    lcd.print(flon,10);

    delay(1000); //Refresh time
  }

But this , the original one does overwrite the GPS position data .

//How to use SKM53 GPS Shieldwith Arduino or CT-UNO
//More infor available at http://tutorial.cytron.com.my/

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

LiquidCrystal lcd (8,9,13,12,11,10);  //pin initialization for lcd
SoftwareSerial ss(2,3);           //software serial pin for skm53 shield
TinyGPS gps;

const int button_key=A0;          //button pin for lcd keypad shield

//variables for gps
boolean newData=false;
float flat,flon;
//int year;byte month,day,hour,minute,second;

boolean state=0;

void setup() 
{
  pinMode(button_key,INPUT);
  lcd.begin(16,2);
  lcd.print("Acquiring GPS...");
  ss.begin(9600);
}

void loop() 
{
//  if(analogRead(button_key)>600&&analogRead(button_key)<650)    //read the lcd keypad button
//  state^=1;
 
  while(ss.available())
  {
    char c=ss.read();
    if(gps.encode(c))
    {
      newData=true;
      gps.f_get_position(&flat,&flon);
//      gps.crack_datetime(&year,&month,&day,&hour,&minute,&second);
//      hour=hour+8;           //hour +8 for GMT+8 time zone
    }
  }
  
  if(newData)
  {
    lcd.clear();
    if(state==0)              //display latitude and longitude
    {
      lcd.setCursor(0,0);
      lcd.print("Lat ");
      lcd.setCursor(4,0);  // print position(x,y)
      lcd.print(flat,10);  // (....,precision)
      
      lcd.setCursor(0,1);
      lcd.print("Lon ");
      lcd.setCursor(4,1);
      lcd.print(flon,10);
    }
//    else if(state==1)        //display date and time
//    {
//      lcd.setCursor(0,0);
//      lcd.print("Date:");
//      lcd.setCursor(6,0);
//      lcd.print(day);
//      lcd.print("/");
//      lcd.print(month);
//      lcd.print("/");
//      lcd.print(year);
//      
//      lcd.setCursor(0,1);
//      lcd.print("Time:");
//      lcd.setCursor(6,1);
//      lcd.print(hour);
//      lcd.print(":");
//      lcd.print(minute);
//      lcd.print(":");
//      lcd.print(second);
//    }
    newData=false;
    delay(1000); // refresh time
  }
}

// TESTING 
// 9-10-2015 3PM 
// position: 3.0638599395, 101.61808013 (CDIO2, 314m off)
// connection time: 3mins (outdoors, CDIO2 stairs)

From this output it is apparent that once you get the result in EastSideGliding it gets stuck there.
( Maybe the "new data" not getting updated is the issue).
To slow things down for test add delay ( 1 second) AFTER after your code you used to get the Serial to print the test value.

Than post the entire and actual code you used to get this test to print the GPS data.

For further aid in test - add
Serial.println( LINE); AFTER each Serial.println(func); to indicate entry and exit from each function.
You may need to turn on "display line numbers " in "preferences".

Or if you prefer add these macros to your LCD code.

PS Using pin 13 as data in LCD will not affect your code , just makes the build_in LED to follow the data.
And you won't notice that anyway. But something to keep in mind.

loop
GetGPSPosition();
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding();
WestSideGliding
WestSideGliding
WestSideGliding();
loop
loop
GetGPSPosition();
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding();
WestSideGliding
WestSideGliding
WestSideGliding();
loop
loop
GetGPSPosition();
PrintPositionOnLCD();
EastSideGliding
EastSideGliding
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
EastSideGliding
EastSideGliding
101.61810302
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>
#include <TinyGPS.h>

LiquidCrystal lcd(8,9,13,12,11,10); //Pin initialization for LCD
SoftwareSerial ss(2,3); //Software serial pin for SKM53 shield
TinyGPS gps;

boolean NewData=false;
float flat;
float flon;
float InitialLatitude=3.0635199546; //Latitude (horizontal line) above (North side;+ve) the equator
float InitialLongitude=101.61813354; //Longitde (vertical line) to the right (East side;+ve) of prime meridian 

int E1=6; //Direction control for motor 1
int E2=5; //Direction control for motor 2
int M1=7; //Enable control for motor 1
int M2=4; //Enable control for motor 2
//String IncomingCommand ;

void setup(){
  lcd.begin(16,2);
  lcd.print("Acquiring GPS ......");
  ss.begin(9600);
  Serial.begin(9600);
  pinMode(E1,OUTPUT);
  pinMode(E2,OUTPUT);
  pinMode(M1,OUTPUT);
  pinMode(M2,OUTPUT);
}

void loop(){
  GetGPSPositionAndPrintOnLCD();
  EastSideGliding();
  //WestSideGliding();
}

void GetGPSPositionAndPrintOnLCD(){Serial.println(__func__);
  while(ss.available()){
    char c=ss.read();

    if(gps.encode(c)){Serial.println("I GET THE DATA ALREADY");
      NewData=true;
      gps.f_get_position(&flat,&flon);
    }
  }

  if(NewData==true){Serial.println("TIME TO CLEAR LCD AND UPDATE IT");
    lcd.clear();

    lcd.setCursor(0,0);
    lcd.print("Lat ");
    lcd.setCursor(4,0); //Print position (x,y)
    lcd.print(flat,10); //(......,precision)
 
    lcd.setCursor(0,1);
    lcd.print("Lon ");
    lcd.setCursor(4,1);
    lcd.print(flon,10);
  }Serial.println("END OF GETGPSPOSITIONANDPRINTONLCD");

  delay(1000);
}

//Set parachute to glide to the East side
void EastSideGliding(){Serial.println(__func__);
  if(NewData==true){Serial.println("GOT DATA TO RUN EASTSIDEGLIDING");
    if(flon<InitialLongitude){
      int i=1;
      NewData=false;
     Serial.println("ALRIGHT FLON IS LESS THAN INITIAL LONGITUDE VALUE");
      while(flon<InitialLongitude){
        digitalWrite(M1,LOW);
        digitalWrite(M2,HIGH);
        analogWrite(E2,255);
        delay(3000);
        digitalWrite(M2,LOW);
        i=i+1;
Serial.println("RUN THE MOTOR 1ST");
        delay(10000); //Let parachute glide for 10s
  Serial.println("FINSIH DELAY FOR 10s");
        GetGPSPositionAndPrintOnLCD();

        NewData=false;
        Serial.println(flon,8);
        if(flon==InitialLongitude){
          digitalWrite(M1,LOW);
          digitalWrite(M2,HIGH);
          analogWrite(E2,0);
          delay(i*3000);
          digitalWrite(M2,LOW);
          break;
        }
      }
    }
  }Serial.println("END OF EASTSIDEGLIDING");
}

//Set parachute to glide to the West side
void WestSideGliding(){
  if(NewData==true){
    if(flon>InitialLongitude){
      int i=1;
      NewData=false;

      while(flon>InitialLongitude){
        digitalWrite(M1,HIGH);
        digitalWrite(M2,LOW);
        analogWrite(E1,255);
        delay(3000);
        digitalWrite(M1,LOW);
        i=i+1;

        delay(10000); //Let parachute glide for 10s
  
        GetGPSPositionAndPrintOnLCD();

        NewData=false;
        
        if(flon==InitialLongitude){
          digitalWrite(M1,HIGH);
          digitalWrite(M2,LOW);
          analogWrite(E1,0);
          delay(i*3000);
          digitalWrite(M1,LOW);
          break;
        }
      }
    }
  }
}
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
EastSideGliding
END OF EASTSIDEGLIDING
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
EastSideGliding
END OF EASTSIDEGLIDING
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
EastSideGliding
END OF EASTSIDEGLIDING
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
EastSideGliding
END OF EASTSIDEGLIDING
GetGPSPositionAndPrintOnLCD
I GET THE DATA ALREADY
TIME TO CLEAR LCD AND UPDATE IT
END OF GETGPSPOSITIONANDPRINTONLCD
EastSideGliding
GOT DATA TO RUN EASTSIDEGLIDING
ALRIGHT FLON IS LESS THAN INITIAL LONGITUDE VALUE
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST
FINSIH DELAY FOR 10s
GetGPSPositionAndPrintOnLCD
END OF GETGPSPOSITIONANDPRINTONLCD
101.61804199
RUN THE MOTOR 1ST

The GetGPSPositionAndPrintOnLCD sub function keeps on stuck at the while loop in EastSideGliding

The GetGPSPositionAndPrintOnLCD sub function keeps on stuck at the while loop in EastSideGliding

OK, if you are referring to this as "stucK" realize that if ss.available() is false than NewData will remain false and the whole function just "falls thru" without doing anything until you get some data to ss.

If your application can wait until data is in ss that I would insert this line to your code::

while(!ss.available)); // wait for ss data

You can add timeout (later) if you really do not want to get stuck waiting for ss data, or bite the bullet and use "blink without delay " approach using millis() (time stamps) to control the flow thru this function.

void GetGPSPositionAndPrintOnLCD() {
  Serial.println(__func__);

add this here 

while(!ss.available());          // wait here for data 

// got data , now process it 

  while (ss.available()) { 
    char c = ss.read();

this MAY not be the best approach - processing the data while still reading the ss buffer 
personally I would just read the buffer into c[array] until it is empty than process the data 
But don't work on this now, let's make the app work first , that you can tweak it later. 



    if (gps.encode(c)) {
      Serial.println("I GET THE DATA ALREADY");
      NewData = true;
      gps.f_get_position(&flat, &flon);
    }
  }
  if (NewData == true) {
    Serial.println("TIME TO CLEAR LCD AND UPDATE IT");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Lat ");
    lcd.setCursor(4, 0); //Print position (x,y)
    lcd.print(flat, 10); //(......,precision)
    lcd.setCursor(0, 1);
    lcd.print("Lon ");
    lcd.setCursor(4, 1);
    lcd.print(flon, 10);
  } Serial.println("END OF GETGPSPOSITIONANDPRINTONLCD");
  delay(1000);
}