Hi,
I am new about Arduino programming and i getting the following error while trying to create a program to my Arduino Uno:
"C:...Temp\ccl3xWxN.ltrans0.ltrans.o: In function `loop':
D:\This PC\Documents\Arduino\TCC2\sketch_oct16a/sketch_oct16a.ino:111: undefined reference to `TensionControl(double, double)'
collect2.exe: error: ld returned 1 exit status
exit status 1
Erro compilando para a placa Arduino/Genuino Uno"
Could someone, please, appoint my error?
Here is My Code:
#define BaudRate 9600
#include "Classes.h"
#include "Functions.h"
#include "PinConfig.c"
Object Gas1;
Object Gas2;
Object Gas3;
Object Gas4;
Object Temperature;
Object Pressure;
int
nPoints;
int
StartTime=0,
OperationTime=0,
FinishTime=0;
const int
PointsPool=31,
Elements=3,
DataPoints=2;
bool
ConnectionStatus=false;
void setup()
{
// put your setup code here, to run once:
/*PinConfig*/
PinConfig();
/*Open Comunication channel*/
Serial.begin(BaudRate);
}
void loop()
{
/*Establishing Connection*/
while(Serial.readStringUntil('\n')!="Trying to Connect"){}
Serial.println("Connected");
/*Dimensioning Matrixws*/
while (Serial.readStringUntil('\n')!="N Points") {}
nPoints=Serial.readStringUntil('\n').toInt();
Serial.println("N Points recieved");
Gas1.MatrixSize(nPoints,2);
Gas2.MatrixSize(nPoints,2);
Gas3.MatrixSize(nPoints,2);
Gas4.MatrixSize(nPoints,2);
Temperature.MatrixSize(nPoints,2);
Pressure.MatrixSize(nPoints,2);
/*Data Matrix*/
for (int i=0;i<nPoints;i++)
{
Gas1.DataMatrix[i][0]=Serial.readStringUntil('\n').toDouble();
Gas1.DataMatrix[i][1]=Serial.readStringUntil('\n').toDouble();
Gas2.DataMatrix[i][0]=Serial.readStringUntil('\n').toDouble();
Gas2.DataMatrix[i][1]=Serial.readStringUntil('\n').toDouble();
Gas3.DataMatrix[i][0]=Serial.readStringUntil('\n').toDouble();
Gas3.DataMatrix[i][1]=Serial.readStringUntil('\n').toDouble();
Gas4.DataMatrix[i][0]=Serial.readStringUntil('\n').toDouble();
Gas4.DataMatrix[i][1]=Serial.readStringUntil('\n').toDouble();
Temperature.DataMatrix[i][0]=Serial.readStringUntil('\n').toDouble();
Temperature.DataMatrix[i][1]=Serial.readStringUntil('\n').toDouble();
Pressure.DataMatrix[i][0]=Serial.readStringUntil('\n').toDouble();
Pressure.DataMatrix[i][1]=Serial.readStringUntil('\n').toDouble();
}
/*Starting Operation*/
//Defining StartTime
StartTime=millis();
//Defining FinsihTime
FinishTime=Gas1.DataMatrix[nPoints-1][0];
while(OperationTime<=FinishTime)
{
//Defining OperationTime
OperationTime=StartTime-millis();
TensionControl(OperationTime, **Gas1.DataMatrix);
}
}
here are the library the I created to use with my code:
Classes.h:
#include "Arduino.h"
#ifndef Classes_H
#define Classes_H
#define nRows 100
#define nColumns 2
class Object
{
public:
Object();
void MatrixSize(int _nRows, int _nColumns);
int
nPoints;
double
DataMatrix[nRows][nColumns];
private:
};
Object::Object()
{
}
;
void Object::MatrixSize(int _nRows, int _nColumns)
{
nPoints=_nRows;
};
#endif
Functions.h:
/*Functions Library*/
#include "Arduino.h"
#ifndef Functions_H
#define Functions_H
double LinearInterpolation( double, double);
int TensionControl(double, double);
int TensionControl(double _DesiredPoint, double** _Matrix) //Control Tension throught time matrix
{
/*PWM Variable*/
int PWM=-10;
/*reading number of control points*/
int n=sizeof(**_Matrix);
/*Interval array*/
double k[2][2];
/*Select interval*/
for (int i=0; i<n; i++)
{
if (_Matrix[i][0]<_DesiredPoint)
{
/*x_Axays*/
k[0][0]=_Matrix[i][0];
k[1][0]=_Matrix[i+1][0];
/*y_axis*/
k[0][1]=_Matrix[i][1];
k[1][1]=_Matrix[i+1][1];
}
}
PWM=LinearInterpolation(_DesiredPoint,**k);
return PWM;
}
double LinearInterpolation(double _DesiredPoint, double** _Matrix) //linear interpolation
{
double y=-1;
if (_Matrix[0][0]<= _DesiredPoint <=_Matrix[1][0])
{
y=(_DesiredPoint-_Matrix[0][0])/(_Matrix[1][0]-_Matrix[0][0])*(_Matrix[1][1]-_Matrix[0][1])+_Matrix[0][1];
}
return y;
}
#endif
and PinConfig.c:
/*Pins Configurations*/
#include "Arduino.h"
#ifndef PinConfig_H
#define PinConfig_H
void PinConfig()
{
}
#endif
I am also attaching some Screenshots of my program