Go Down

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

#### darkgoresss

##### Aug 17, 2013, 01:18 am
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 1int 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

#1
##### Aug 17, 2013, 09:52 am
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

#2
##### Aug 17, 2013, 12:23 pm
como has llegado a escribir todo ese codigo sin saber lo de setup() y loop() ?

#### darkgoresss

#3
##### Aug 17, 2013, 07:13 pm
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