Ayuda, no encuentro el error en mi codigo, " error: expected unqualified-id before '{' token {
Publicado por Jack (1 intervención) el 08/03/2022 22:01:18
#include <QTRSensors.h>
//entradas
//salidas
#define led1 13
#define led_on 9 //~
#define mi1 3
#define mi2 4
#define pwmi 6 //~
#define md1 8
#define md2 7
#define pwmd 5 //~
#define NUM_SENSORS 8 // number of sensors used
#define NUM_SAMPLES_PER_SENSOR 1 // average 4 analog samples per sensor reading
#define EMITTER_PIN 9 // emitter is controlled by digital pin 2
QTRSensorsAnalog qtra((unsigned char[]) {7, 6, 5, 4, 3, 2,1,0},NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN);
unsigned int sensorValues[NUM_SENSORS];
int proporcional=0;
int derivativo=0;
int integral=0;
int salida_pwm=0;
int proporcional_pasado=0;
int position=0;
////////////////////Parametros PID/////////////////////////////////
int velocidad=120;
//float KP=0.15, KD=2.2, KI=0.006; //reaccion rapida
float KP=0.01, KD=0.15 , KI=0.0001; //reaccion rapida
///////////////////////////////////////////////////////
/////////////////parametros de sensado/////////////////////////////
int linea=0; //0 linea negra, 1 para linea blanca
int flanco_color= 0 ;
int en_linea= 500 ;
int ruido= 30;
/////////////////////////////////////////////////////////
int boton1=7;
int boton2=7;
void setup()
{
pinMode(led1,OUTPUT);
pinMode(mi1,OUTPUT);
pinMode(mi2,OUTPUT);
pinMode(pwmi,OUTPUT);
pinMode(md1,OUTPUT);
pinMode(md2,OUTPUT);
pinMode(pwmd,OUTPUT);
digitalWrite(led1,HIGH);
delay(200);
digitalWrite(led1,LOW);
delay(200);
digitalWrite(led1, HIGH); // turn on Arduino's LED to indicate we are in calibration mode
for (int i = 0; i < 200; i++) // make the calibration take about 10 seconds
{
qtra.calibrate(); // reads all sensors 10 times at 2.5 ms per six sensors (i.e. ~25 ms per call)
}
digitalWrite(led1, LOW); // turn off Arduino's LED to indicate we are through with calibration
//Serial.begin(115200);
//Serial.println();
while(true)
{
delay(20);
digitalWrite(led1,HIGH);
delay(100);
digitalWrite(led1,LOW);
delay(100);
break;
}
}
void loop()
{
void pid(int linea, int velocidad, float Kp, float Ki, float Kd);
{
Serial.println(position);
delay(2);
}
}
void pid(int linea, int velocidad, float Kp, float Ki, float Kd);
{
position = qtra.readLine(sensorValues,QTR_EMITTERS_ON, linea, flanco_color, en_linea, ruido);
//0 linea negra, 1 para linea blanca
// Serial.println(position);
proporcional = (position) - 3500; // set point es 3500, asi obtenemos el error
integral=integral + proporcional_pasado; //obteniendo integral
derivativo = (proporcional - proporcional_pasado); //obteniedo el derivativo
int ITerm=integral*KI;
if(ITerm>=255) ITerm=255;
if(ITerm<=-255) ITerm=-255;
salida_pwm =( proporcional * KP ) + ( derivativo * KD )+(ITerm);
if ( salida_pwm >velocidad ) salida_pwm = velocidad; //limitamos la salida de pwm
if ( salida_pwm <-velocidad ) salida_pwm = -velocidad;
if (salida_pwm < 0)
{
int der=velocidad-salida_pwm; //(+)
int izq=velocidad+salida_pwm; //(-)
if(der>=255)der=255;
if(izq<=0)izq=0;
motores(izq, der);
}
if (salida_pwm >0)
{
int der=velocidad-salida_pwm; //(-)
int izq=velocidad+salida_pwm; //(+)
if(izq >= 255) izq=255;
if(der <= 0) der=0;
motores(izq ,der );
}
proporcional_pasado = proporcional;
}
void frenos_contorno(int flanco_comparacion)
{
if (position <=10) //si se salio por la parte derecha de la linea
{
while(true)
{
digitalWrite(led1,HIGH);
motores(-125,60);
qtra.read(sensorValues); //lectura en bruto de sensor
if ( sensorValues[0]<flanco_comparacion || sensorValues[1]<flanco_comparacion || sensorValues[2]<flanco_comparacion || sensorValues[3]<flanco_comparacion || sensorValues[4]<flanco_comparacion || sensorValues[5]<flanco_comparacion || sensorValues[6]<flanco_comparacion || sensorValues[7]<flanco_comparacion)
{
break;
}
}
}
if (position>=6990) //si se salio por la parte izquierda de la linea
{
while(true)
{
digitalWrite(led1,HIGH);
motores(60,-125);
qtra.read(sensorValues);
if (sensorValues[7]<flanco_comparacion || sensorValues[6]<flanco_comparacion|| sensorValues[5]<flanco_comparacion || sensorValues[4]<flanco_comparacion || sensorValues[3]<flanco_comparacion || sensorValues[2]<flanco_comparacion || sensorValues[1]<flanco_comparacion|| sensorValues[0]<flanco_comparacion)
{
break;
}
}
}
digitalWrite(led1,LOW);
}
void motores(int motor_izq, int motor_der)
{
if ( motor_izq >= 0 )
{
digitalWrite(mi1,LOW);
digitalWrite(mi2,HIGH);
analogWrite(pwmi,motor_izq);
}
else
{
digitalWrite(mi1,HIGH);
digitalWrite(mi2,LOW);
motor_izq = motor_izq*(-1);
analogWrite(pwmi,motor_izq);
}
if ( motor_der >= 0 ) //motor derecho
{
digitalWrite(md1,LOW);
digitalWrite(md2,HIGH);
analogWrite(pwmd,motor_der);
}
else
{
digitalWrite(md1,HIGH);
digitalWrite(md2,LOW);
motor_der= motor_der*(-1);
analogWrite(pwmd,motor_der);
}
}
//entradas
//salidas
#define led1 13
#define led_on 9 //~
#define mi1 3
#define mi2 4
#define pwmi 6 //~
#define md1 8
#define md2 7
#define pwmd 5 //~
#define NUM_SENSORS 8 // number of sensors used
#define NUM_SAMPLES_PER_SENSOR 1 // average 4 analog samples per sensor reading
#define EMITTER_PIN 9 // emitter is controlled by digital pin 2
QTRSensorsAnalog qtra((unsigned char[]) {7, 6, 5, 4, 3, 2,1,0},NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN);
unsigned int sensorValues[NUM_SENSORS];
int proporcional=0;
int derivativo=0;
int integral=0;
int salida_pwm=0;
int proporcional_pasado=0;
int position=0;
////////////////////Parametros PID/////////////////////////////////
int velocidad=120;
//float KP=0.15, KD=2.2, KI=0.006; //reaccion rapida
float KP=0.01, KD=0.15 , KI=0.0001; //reaccion rapida
///////////////////////////////////////////////////////
/////////////////parametros de sensado/////////////////////////////
int linea=0; //0 linea negra, 1 para linea blanca
int flanco_color= 0 ;
int en_linea= 500 ;
int ruido= 30;
/////////////////////////////////////////////////////////
int boton1=7;
int boton2=7;
void setup()
{
pinMode(led1,OUTPUT);
pinMode(mi1,OUTPUT);
pinMode(mi2,OUTPUT);
pinMode(pwmi,OUTPUT);
pinMode(md1,OUTPUT);
pinMode(md2,OUTPUT);
pinMode(pwmd,OUTPUT);
digitalWrite(led1,HIGH);
delay(200);
digitalWrite(led1,LOW);
delay(200);
digitalWrite(led1, HIGH); // turn on Arduino's LED to indicate we are in calibration mode
for (int i = 0; i < 200; i++) // make the calibration take about 10 seconds
{
qtra.calibrate(); // reads all sensors 10 times at 2.5 ms per six sensors (i.e. ~25 ms per call)
}
digitalWrite(led1, LOW); // turn off Arduino's LED to indicate we are through with calibration
//Serial.begin(115200);
//Serial.println();
while(true)
{
delay(20);
digitalWrite(led1,HIGH);
delay(100);
digitalWrite(led1,LOW);
delay(100);
break;
}
}
void loop()
{
void pid(int linea, int velocidad, float Kp, float Ki, float Kd);
{
Serial.println(position);
delay(2);
}
}
void pid(int linea, int velocidad, float Kp, float Ki, float Kd);
{
position = qtra.readLine(sensorValues,QTR_EMITTERS_ON, linea, flanco_color, en_linea, ruido);
//0 linea negra, 1 para linea blanca
// Serial.println(position);
proporcional = (position) - 3500; // set point es 3500, asi obtenemos el error
integral=integral + proporcional_pasado; //obteniendo integral
derivativo = (proporcional - proporcional_pasado); //obteniedo el derivativo
int ITerm=integral*KI;
if(ITerm>=255) ITerm=255;
if(ITerm<=-255) ITerm=-255;
salida_pwm =( proporcional * KP ) + ( derivativo * KD )+(ITerm);
if ( salida_pwm >velocidad ) salida_pwm = velocidad; //limitamos la salida de pwm
if ( salida_pwm <-velocidad ) salida_pwm = -velocidad;
if (salida_pwm < 0)
{
int der=velocidad-salida_pwm; //(+)
int izq=velocidad+salida_pwm; //(-)
if(der>=255)der=255;
if(izq<=0)izq=0;
motores(izq, der);
}
if (salida_pwm >0)
{
int der=velocidad-salida_pwm; //(-)
int izq=velocidad+salida_pwm; //(+)
if(izq >= 255) izq=255;
if(der <= 0) der=0;
motores(izq ,der );
}
proporcional_pasado = proporcional;
}
void frenos_contorno(int flanco_comparacion)
{
if (position <=10) //si se salio por la parte derecha de la linea
{
while(true)
{
digitalWrite(led1,HIGH);
motores(-125,60);
qtra.read(sensorValues); //lectura en bruto de sensor
if ( sensorValues[0]<flanco_comparacion || sensorValues[1]<flanco_comparacion || sensorValues[2]<flanco_comparacion || sensorValues[3]<flanco_comparacion || sensorValues[4]<flanco_comparacion || sensorValues[5]<flanco_comparacion || sensorValues[6]<flanco_comparacion || sensorValues[7]<flanco_comparacion)
{
break;
}
}
}
if (position>=6990) //si se salio por la parte izquierda de la linea
{
while(true)
{
digitalWrite(led1,HIGH);
motores(60,-125);
qtra.read(sensorValues);
if (sensorValues[7]<flanco_comparacion || sensorValues[6]<flanco_comparacion|| sensorValues[5]<flanco_comparacion || sensorValues[4]<flanco_comparacion || sensorValues[3]<flanco_comparacion || sensorValues[2]<flanco_comparacion || sensorValues[1]<flanco_comparacion|| sensorValues[0]<flanco_comparacion)
{
break;
}
}
}
digitalWrite(led1,LOW);
}
void motores(int motor_izq, int motor_der)
{
if ( motor_izq >= 0 )
{
digitalWrite(mi1,LOW);
digitalWrite(mi2,HIGH);
analogWrite(pwmi,motor_izq);
}
else
{
digitalWrite(mi1,HIGH);
digitalWrite(mi2,LOW);
motor_izq = motor_izq*(-1);
analogWrite(pwmi,motor_izq);
}
if ( motor_der >= 0 ) //motor derecho
{
digitalWrite(md1,LOW);
digitalWrite(md2,HIGH);
analogWrite(pwmd,motor_der);
}
else
{
digitalWrite(md1,HIGH);
digitalWrite(md2,LOW);
motor_der= motor_der*(-1);
analogWrite(pwmd,motor_der);
}
}
Valora esta pregunta


0