Go Down

Topic: Problema compilando (Read 576 times) previous topic - next topic

darkgoresss

Hola gente del foro, espero estén bien, soy nuevo usando arduino y recurro a uds para que me puedan ayudar.  Estoy compilando un algoritmo para PID, pero el programa me arroja el siguiente error
undefined reference to `setup'
undefined reference to `loop'

el código se los dejo de inmediato

Code: [Select]
// Variables de trabajo.
unsigned long lastTime;
double Input, Output, Setpoint;
double ITerm, lastInput;
double kp, ki, kd;
int SampleTime = 1000; // Tiempo de muestreo 1 segundo.
double outMin, outMax;
bool inAuto = false;
#define MANUAL 0
#define AUTOMATIC 1
#define DIRECT 0
#define REVERSE 1
int controllerDirection = DIRECT;
void Compute()
{
if(!inAuto) return;
unsigned long now = millis();
int timeChange = (now - lastTime);
if(timeChange>=SampleTime)
{
// Calculamos todos los errores.
double error = Setpoint - Input;
ITerm+= (ki * error);
if(ITerm> outMax) ITerm= outMax;
else if(ITerm< outMin) ITerm= outMin;
double dInput = (Input - lastInput);
// Calculamos la función de salida del PID.
Output = kp * error + ITerm- kd * dInput;
if(Output > outMax) Output = outMax;
else if(Output < outMin) Output = outMin;

// Guardamos el valor de algunas variables para el próximo recálculo.
lastInput = Input;
lastTime = now;
}
}
void SetTunings(double Kp, double Ki, double Kd)
{
if (Kp<0 || Ki<0|| Kd<0) return;
double SampleTimeInSec = ((double)SampleTime)/1000;
kp = Kp;
ki = Ki * SampleTimeInSec;
kd = Kd / SampleTimeInSec;
if(controllerDirection ==REVERSE)
{
kp = (0 - kp);
ki = (0 - ki);
kd = (0 - kd);
}
}
void SetSampleTime(int NewSampleTime)
{
if (NewSampleTime > 0)
{
double ratio = (double)NewSampleTime / (double)SampleTime;
ki *= ratio;
kd /= ratio;
SampleTime = (unsigned long)NewSampleTime;
}
}
void SetOutputLimits(double Min, double Max)
{
if(Min > Max) return;
outMin = Min;
outMax = Max;
if(Output > outMax) Output = outMax;
else if(Output < outMin) Output = outMin;
if(ITerm> outMax) ITerm= outMax;
else if(ITerm< outMin) ITerm= outMin;
}
void SetMode(int Mode)
{
bool newAuto = (Mode == AUTOMATIC);
if(newAuto && !inAuto)
{ // Para cambiar de manual a automático, inicializamos algunos parámetros.
Initialize();
}
inAuto = newAuto;
}
void Initialize()
{
lastInput = Input;
ITerm = Output;
if(ITerm> outMax) ITerm= outMax;
else if(ITerm< outMin) ITerm= outMin;
}
void SetControllerDirection(int Direction)
{
controllerDirection = Direction;
}


Aun no se como arreglar lo que me pide, desde ya muchas gracias

fermg

Hola para que el arduino funcione tienes que poner siempre en el programa las dos instrucciones. setup y loop y tu no las has puesto.


void setup()
{
aqui configuras los pines, si son entradas o salidas y demas cosas
}

void loop()
{
aquí pones el código que quieres que ejecute
}

Sergegsx

como has llegado a escribir todo ese codigo sin saber lo de setup() y loop() ?

darkgoresss

lo que pasa es que busqué una aplicación para pid con mi tarjeta y como no tengo muchas nociones de programación, no me di cuenta de dicho error, muchas gracias por la respuesta :33

Go Up