error: expected primary-expression before '.' token

Hi

Help! Please. I have a look at similar "expected primary-expression before" problems on the forum but can't work this one out.

Clicking verify gives:
"GetKp_problem.ino: In function 'void setup()':
GetKp_problem.ino:9:14: error: expected primary-expression before '.' token
Error compiling."


My code is:
"#include <PID_v1.h>

// This program isolates the GetKp problem

double KpSet ; // PID GAIN currently set in the PID instruction

void setup() {
// setup code
KpSet = PID.GetKp();
}

void loop() {
//
}"


PID_v1.h code is:
"#ifndef PID_v1_h
#define PID_v1_h
#define LIBRARY_VERSION 1.1.1

class PID
{

public:

//Constants used in some of the functions below
#define AUTOMATIC 1
#define MANUAL 0
#define DIRECT 0
#define REVERSE 1
#define P_ON_M 0
#define P_ON_E 1

//commonly used functions **************************************************************************
PID(double*, double*, double*, // * constructor. links the PID to the Input, Output, and
double, double, double, int, int);// Setpoint. Initial tuning parameters are also set here.
// (overload for specifying proportional mode)

PID(double*, double*, double*, // * constructor. links the PID to the Input, Output, and
double, double, double, int); // Setpoint. Initial tuning parameters are also set here

void SetMode(int Mode); // * sets PID to either Manual (0) or Auto (non-0)

bool Compute(); // * performs the PID calculation. it should be
// called every time loop() cycles. ON/OFF and
// calculation frequency can be set using SetMode
// SetSampleTime respectively

void SetOutputLimits(double, double); // * clamps the output to a specific range. 0-255 by default, but
// it's likely the user will want to change this depending on
// the application

//available but not commonly used functions ********************************************************
void SetTunings(double, double, // * While most users will set the tunings once in the
double); // constructor, this function gives the user the option
// of changing tunings during runtime for Adaptive control
void SetTunings(double, double, // * overload for specifying proportional mode
double, int);

void SetControllerDirection(int); // * Sets the Direction, or "Action" of the controller. DIRECT
// means the output will increase when error is positive. REVERSE
// means the opposite. it's very unlikely that this will be needed
// once it is set in the constructor.
void SetSampleTime(int); // * sets the frequency, in Milliseconds, with which
// the PID calculation is performed. default is 100

//Display functions ****************************************************************
double GetKp(); // These functions query the pid for interal values.
double GetKi(); // they were created mainly for the pid front-end,
double GetKd(); // where it's important to know what is actually
int GetMode(); // inside the PID.
int GetDirection(); //

private:
void Initialize();

double dispKp; // * we'll hold on to the tuning parameters in user-entered
double dispKi; // format for display purposes
double dispKd; //

double kp; // * (P)roportional Tuning Parameter
double ki; // * (I)ntegral Tuning Parameter
double kd; // * (D)erivative Tuning Parameter

int controllerDirection;
int pOn;

double *myInput; // * Pointers to the Input, Output, and Setpoint variables
double *myOutput; // This creates a hard link between the variables and the
double *mySetpoint; // PID, freeing the user from having to constantly tell us
// what these values are. with pointers we'll just know.

unsigned long lastTime;
double outputSum, lastInput;

unsigned long SampleTime;
double outMin, outMax;
bool inAuto, pOnE;
};
#endif

"


Laptop has Windows 8.1
on Samsung ATVI Book 9 Lite

You have no object called "PID", just a class.

Please remember to use code tags when posting code

Thanks for this.

I've only just starting using the Arduino IDE. What object should I use to access GetKp and where can i find a description of the difference between objects and classes?

Also, when you say code tags, is that the </> icon on the top of the message entry box?

Regards

Dave

DaveGray65:
Also, when you say code tags, is that the </> icon on the top of the message entry box?

Yes. See how much nicer it looks if you do it that way. Plus, others can easily copy your code (click 'select', then ctrl-c) and paste it into their IDE. Always good to make it easier for those who are trying to help you.

#include <PID_v1.h>

// This program isolates the GetKp problem

double KpSet ;  // PID GAIN currently set in the PID instruction

void setup() {
  // setup code
  KpSet = PID.GetKp();
}

void loop() {
  //
}

I've only just starting using the Arduino IDE.

Does that mean that you are not aware that every library comes with examples that show how to use the library?

In the PID examples I saw a line PID myPID(&input, &output, &setpoint,kp,ki,kd, DIRECT); but I couldn't find an explanation of what it was doing so I've just been experimenting. Could you let me know where I can find out about the relationship between objects and classes?

An extremely over-simplified view is that a Class is like blueprints for building a house -- necessary to have, but you can’t live in it.

An Object is a house built from those plans -- now you can move in. And, you can build multiple, independent, houses from those plans.

Now, try Googling “Object Oriented Programming”.

I'm a retired programmer so I understand the principles of object oriented programming.
I believe that the Arduino IDE is based on one of the languages developed from C. However, I was never called upon to use any of them.
My current problem is that I can't find a programmers guide that gives the structure behind PID myPID(&Input, &Output, &Setpoint,2,5,1,P_ON_M, DIRECT);
I'm also having difficulty understanding the structure of function definitions like double PID::GetKp(){ return  dispKp; } for which a programmer's guide would be useful

I am not sure how you installed the PID library but if it was done using the Library Manager in the IDE then you may or may not have seen PID Library which has explanations of the functions available and their parameters

Delta_G:
It's regular C++. Go look at any C++ tutorial and when you get to the part about classes and OOP you'll about creating objects from classes like that.

Thanks
That's probably what I need to know, I'll go and have a look. I understand that C++ is quite monster so don't hold your breath for my next contribution here.