Extending TinyGPS++ to pick up new parameter

Hi!
Having a GPS procject moving forward I think about retreiving a new parameter, not part of the standard params. It does not compile and I feel lost.

The apporach is like

TinyGPSCustom vdop(gps, "GPGSA", 17);


void setup()
{
  int status;

  Serial.print(vdop);

Main code is:

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

#include <Wire.h>
#include <hd44780.h>
#include <hd44780ioClass/hd44780_I2Cexp.h>

//#define BACKLIGHT_PIN     13

hd44780_I2Cexp mylcd; // declare lcd object: auto locate & config exapander chip

// LCD geometry
//const int LCD_COLS = 20;
//const int LCD_ROWS = 4;
#define LCD_COLS 20
#define LCD_ROWS 4

// The TinyGPS++ object
TinyGPSPlus gps;

//Create GPS channel
#define RX 2
#define TX 3
SoftwareSerial mySerial(RX, TX);  // pick any 2 unused digital pins (not pins 0 or 1)

#define time_adj 2// adjust: +1 for winter time, +2 for summer time

int act_cnt = 0;
char activity[] = "<><>";
unsigned long next_act_print, Start_Up_Time = millis();
//unsigned int speed_age, hdop_age, alt_age, dir_age, sat_age;
unsigned long speed_age, hdop_age, alt_age, dir_age, sat_age;

TinyGPSCustom vdop(gps, "GPGSA", 17);


void setup()
{
  int status;

  Serial.print(vdop);
  // initialize LCD with number of columns and rows:
  // hd44780 returns a status from begin() that can be used
  // to determine if initalization failed.
  // the actual status codes are defined in <hd44780.h>
  // See the values RV_XXXX
  //
  // looking at the return status from begin() is optional
  // it is being done here to provide feedback should there be an issue
  //
  // note:
  //  begin() will automatically turn on the backlight
  //
  status = mylcd.begin(LCD_COLS, LCD_ROWS);
  if (status) // non zero status means it was unsuccesful
  {
    status = -status; // convert negative status value to positive number

    // begin() failed so blink error code using the onboard LED if possible
    hd44780::fatalError(status); // does not return
  }
  mylcd.clear();
  // initalization was successful, the backlight should be on now

  mySerial.begin(9600);  // 9600 is the default baud rate for my Neo6m units
  Serial.begin(9600);// For PC, serial monitor

  // Print start message to the LCD
  mylcd.print("Starting");
  // Print start message to the PC
  Serial.println("Starting up");//sent to PC

  next_act_print, Start_Up_Time = millis();
  speed_age, hdop_age, alt_age, dir_age, sat_age = 999;
}

void loop()
{
  int tmp;

  while (mySerial.available() > 0)
    //  gps.encode(mySerial.read());

  {
    if ( gps.encode(mySerial.read()))
    {
      //Data received. Process them
      //                                                   Altitude
      if (gps.altitude.isValid())
      {
        tmp = int(gps.altitude.meters() + 0.5);
        if (tmp > 999) tmp = 999;
        if (tmp < -99) tmp = -99;
        mylcd.setCursor(0, 1);
        mylcd.print("Alt: ");
        //        if (tmp < 1000) mylcd.print(" ");
        if (tmp < 100) mylcd.print(" ");
        if (tmp < 10) mylcd.print(" ");
        mylcd.print(tmp);

        alt_age = gps.altitude.age();
        mylcd.setCursor(9, 1); mylcd.print("A    "); mylcd.setCursor(11, 1); mylcd.print( min( int(alt_age / 1000), 999));
      }
//***************************************************************************************
//$PGRMZ

//Altitude Information 
//eg1. $PGRMZ,246,f,3*1B
//eg2. $PGRMZ,93,f,3*21

//      93,f         Altitude in feet
//       3            Position fix dimensions 2 = user altitude
//                                            3 = GPS altitude
//  This sentence shows in feet, regardless of units shown on the display.

//eg3.  $PGRMZ,201,f,3*18
//              1  2 3
//      1  201   Altitude
//      2  F     Units - f-Feet
//      3  checksum
//***************************************************************************************
//$PGRME

//Estimated Position Error 
//eg. $PGRME,15.0,M,45.0,M,25.0,M*22

//           15.0,M       Estimated horizontal position error in metres (HPE)
//           45.0,M       Estimated vertical error (VPE) in metres
//           25.0,M       Overall spherical equivalent position error
//***************************************************************************************
//$GPGGA                                       !!!!!!!
//***************************************************************************************

//***************************************************************************************

      //                                                                Hdop
      if (gps.hdop.isValid())
      {
        tmp = gps.hdop.value();
        mylcd.setCursor(16, 3);
        if (tmp > 100) mylcd.print("H>1");
        else mylcd.print("H<1");
        hdop_age = gps.hdop.age();
      }

      //  if (gps.vdop.isValid())
      //  {
      //    mylcd.setCursor(10, 2);
      //    mylcd.print("VDop: ");
      //    if (gps.vdop.value() > 999)
      //    tmp = gps.vdop.value();
      //    if (tmp > 999) //1234
      //    {
      //      mylcd.print(tmp / 100);
      //      tmp = tmp - (int(tmp / 100)*100);      //34
      //      mylcd.print(".");
      //      mylcd.print(tmp/10);
      //    }
      //    else
      //    {                         //123
      //      mylcd.print(tmp / 100);//1
      //      mylcd.print(".");
      //      tmp = tmp - (int(tmp / 100)*100);      //23
      //    }
      //  }

      //                                                                 speed
      if (gps.speed.isValid())
      {
        tmp = int(gps.speed.kmph() + 0.5);
        mylcd.setCursor(0, 0);
        mylcd.print("Speed: ");
        if (tmp < 100)mylcd.print(" ");
        if (tmp < 10)mylcd.print(" ");
        mylcd.print(tmp);

        speed_age = gps.speed.age();
        //mylcd.setCursor(15, 2); mylcd.print("S    "); mylcd.setCursor(17, 2); mylcd.print( min( speed_age, 999));
      }

      //                                                             date
      if (gps.date.isValid())
      {
        mylcd.setCursor(0, 3);
        mylcd.print(gps.date.year());
        mylcd.print("-");
        if (gps.date.month() < 10) mylcd.print("0");
        mylcd.print(gps.date.month());
        mylcd.print("-");
        if (gps.date.day() < 10) mylcd.print("0");
        mylcd.print(gps.date.day());
      }
      //                                                     time

      if (gps.time.isValid())
      {
        mylcd.setCursor(0, 2);
        tmp = gps.time.hour() + time_adj; // adjust: +1 for winter time, +2 for summer time
        if (tmp >= 24) tmp = tmp - 24;
        if (tmp < 10) mylcd.print("0");
        mylcd.print(tmp);
        mylcd.print("-");
        if (gps.time.minute() < 10) mylcd.print("0");
        mylcd.print(gps.time.minute());
        mylcd.print("-");
        if (gps.time.second() < 10) mylcd.print("0");
        mylcd.print(gps.time.second());
        mylcd.print(" ");
      }
      //                                                              Cource, Direction
      if (gps.course.isValid())
      {
        tmp = int(gps.course.deg() + 0.5);
        while (tmp >= 360) tmp = tmp - 360;
        mylcd.setCursor(11, 0);
        mylcd.print("Dir: ");
        if (tmp < 100 ) mylcd.print(" ");
        if (tmp < 10 ) mylcd.print(" ");
        mylcd.print(tmp);

        dir_age = gps.course.age();

        //mylcd.setCursor(15, 1); mylcd.print("D    "); mylcd.setCursor(17, 1); mylcd.print( min( dir_age, 999));
      }
      //                                              satelites
      if (gps.satellites.isValid())
      {
        mylcd.setCursor(11, 3);
        mylcd.print("S:  ");
        mylcd.setCursor(13, 3);
        mylcd.print(min(gps.satellites.value(),99));
        sat_age = gps.satellites.age();
        mylcd.setCursor(9, 2); mylcd.print("s    "); mylcd.setCursor(11, 2); mylcd.print( min( int(sat_age/1000), 999));
      }

      if (millis() > next_act_print)
      {
        mylcd.setCursor(19, 3);
        mylcd.print(activity[act_cnt++ % 4]);
        next_act_print = millis() + 500;

        //Print out for serial monitoring

        Serial.print("Time: "); Serial.print(millis() / 1000);
        Serial.print(" Speed: "); Serial.print(int(gps.speed.kmph() + 0.5));
        Serial.print(" Alt: "); Serial.print(int(gps.altitude.meters() + 0.5));
        Serial.print(" Hdop: "); Serial.print(gps.hdop.value());
        Serial.print(" Dir: "); Serial.print(int(gps.course.deg() + 0.5));
        Serial.print(" Sats: "); Serial.println(gps.satellites.value());

      }


   Serial.print("Alt max min ");
    }//end of if encode
  }// end of while chars to receive
}//end of loop()
TinyGPSCustom vdop(gps, "GPGSA", 17);

void setup()
{
  int status;
  Serial.print(vdop);
}

Try,

Serial.print(vdop.value());

Hi and thanks a lot again!
That did the trick. The Vdop presents a value around 1.69. It seems to be scaled down by 100 times compared to Hdop. I will see what I can dig up about this parameter.
karma++ pressed….