problemas con programa para controlar temperatura de un horno con logica difusa

#1
hola estoy realizando un controlador de temperatura para un horno con logica difusa
pero tengo problemas para programar me sale error de sintaxis

PHP:
//DEFINICIÓN DE RANGOS DE LAS FUNCIONES
//TEMPERATURA
#define TEMP_ES_CALIENTE (settemp>=50 && settemp<=70)
#define TEMP_ES_ALTA (settemp>=50 && settemp<=100)
#define TEMP_ES_MUYALTA (settemp>=80 && settemp<=100)
//ECUACIONES DEFINIDAS PARA LA TEMPERATURA DEL HORNO ELÉCTRICO
#define EC_TCALIENTE(x) (70-(float)x)/20
#define EC_TALTAPOS(x) ((float)x-50)/20
#define EC_TALTANEG(x) (100-(float)x)/20
#define EC_TMUYALTA(x) ((float)x-80)/20
//DEFINICIÓN DE RANGOS DE LAS FUNCIONES
//ERROR DEL SISTEMA
#define ERROR_ES_NEGATIVO (error>=(-300) && error<=(-0.75))
#define ERROR_ES_NEGATIVOBAJO (error>=(-1) && error<=0)
#define ERROR_ES_MODERADO (error>=(-0.5) && error<=0.5)
#define ERROR_ES_POSITIVOBAJO (error>=0 && error<=1)
#define ERROR_ES_POSITIVO (error>=0.75 && error<=300)
//ECUACIONES DEFINIDAS PARA EL ERROR DEL SISTEMA
#define EC_NEGATIVO(x) ((-0.75)-(float)x)/0.75
#define EC_NEGATIVOBAJOPOS(x) ((float)x+1)/0.5
#define EC_NEGATIVOBAJONEG(x) -(float)x/0.5
#define EC_MODERADOPOS(x) ((float)x+0.5)/0.5
#define EC_MODERADONEG(x) (0.5-(float)x)/0.5
#define EC_POSITIVOBAJOPOS(x) (float)x/0.5
#define EC_POSITIVOBAJONEG(x) (1-(float)x)/0.5
#define EC_POSITIVO(x) ((float)x-0.75)/0.75
//ENTRADAS DEL SISTEMA DIFUSO
//TEMPERATURA REAL
float SensorTemp() 
{
int cnt = 0;
float psensor;
ADCON1=0b11000101; //Activo ADC0 y Vref+ 1,5V
for(cnt=0;cnt<=10;cnt++) psensor += Adc_Read(0);
{
delay_ms(250);
return psensor;
}
}
//CREACIÓN DE LOS CONJUNTOS DIFUSOS DE ENTRADA
//DEFINICIÓN DE MÉTODOS PARA LA TEMPERATURA
//CALIENTE
float Funcion_TCaliente(float valor)
{
if(valor<50)
{
return 1;
}
else if(valor>=50 && valor<=70)
{
return EC_TCALIENTE(valor);
}
else if(valor>70)
{
return 0;
}
}
//ALTA
float Funcion_TAlta(float valor)
{
if(valor<50)
{
return 0;
}
else if(valor>=50 && valor<70)
{
return EC_TALTAPOS(valor);
}
 
else if(valor>=70 && valor<80)
{
return 1;
}
else if(valor>=80 && valor<100)
{
return EC_TALTANEG(valor);
}
else if(valor>=100)
{
return 0;
}
}
 
//MUYALTA
float Funcion_TMuyAlta(float valor)
{
if(valor<80)
{
return 0;
}
else if(valor>=80 && valor<=100)
{
return EC_TMUYALTA(valor);
}
else if(valor>100)
{
return 1;
}
}
 
//DEFINICIÓN DE MÉTODOS PARA El ERROR DEL SISTEMA
//NEGATIVO
float Funcion_ENegativo(float valor)
{
if(valor<(-1.5))
{
return 1;
}
else if(valor>=(-1.5) && valor<(-0.75))
{
return EC_NEGATIVO(valor);
}
else if(valor>=(-0.75))
{
return 0;
}
}
//NEGATIVOBAJO
float Funcion_ENegativoBajo(float valor)
{
if(valor<(-1))
{
return 0;
}
else if(valor>=(-1) && valor<(-0.5))
{
return EC_NEGATIVOBAJOPOS(valor);
}
else if(valor>=(-0.5) && valor<0)
{
return EC_NEGATIVOBAJONEG(valor);
}
else if(valor>=0)
{
return 0;
}
}
//MODERADO
float Funcion_EModerado(float valor)
{
if(valor<(-0.5))
{
return 0;
}
else if(valor>=(-0.5) && valor<0)
{
return EC_MODERADOPOS(valor);
}
else if(valor>=0 && valor<0.5)
{
return EC_MODERADONEG(valor);
} 
else if(valor>=0.5)
{
return 0;
}
}
//POSITIVOBAJO
float Funcion_EPositivoBajo(float valor)
{
if(valor<0)
{
return 0;
}
else if(valor>=0 && valor<0.5)
{
return EC_POSITIVOBAJOPOS(valor);
}
else if(valor>=0.5 && valor<1)
{
return EC_POSITIVOBAJONEG(valor);
}
else if(valor>=1)
{
return 0;
} 
}
//POSITIVO
float Funcion_EPositivo(float valor)
{
if(valor<0.75)
{
return 0;
}
else if(valor>=0.75 && valor<1.5)
{ 
return EC_POSITIVO(valor);
} 
else if(valor>=1.5)
{
return 1;
}
}
//MÉTODO DE OBTENCIÓN DEL MiNIMO
float Obtener_Minimo(float pertenencia_setpoint, float pertenencia_error)
{
float minimo;
if(pertenencia_setpoint<=pertenencia_error)
{
minimo = pertenencia_setpoint;
}
else if (pertenencia_error<pertenencia_setpoint)
{
minimo = pertenencia_error;
return minimo;
}
}
//MÉTODO DE OBTENCIÓN DEL MáXIMO
float Obtener_Maximo(float v1, float v2, float v3, float v4, float v5)
{
float resultado[10];
float maximo;
if(v1>=v2)
{
resultado[1] = v1;
}
else if (v2>v1)
{
resultado[1] = v2;
}
if(v2>=v3)
{
resultado[2] = v2;
}
else if (v3>v2)
{
resultado[2] = v3;
}
if(v3>=v4)
{
resultado[3] = v3;
}
else if (v4>v3){
resultado[3] = v4;
}
if(v4>=v5)
{
resultado[4] = v4;
}
else if (v5>v4)
{
resultado[4] = v5;
}
if(resultado[1]>=resultado[2])
{
resultado[5] = resultado[1];
}
else if (resultado[2]>resultado[1])
{
resultado[5] = resultado[2];
}
if(resultado[2]>=resultado[3])
{
resultado[6] = resultado[2];
}
else if (resultado[3]>resultado[2])
{
resultado[6] = resultado[3];
}
if(resultado[3]>=resultado[4])
{
resultado[7] = resultado[3];
}
else if (resultado[4]>resultado[3])
{
resultado[7] = resultado[4];
}
if(resultado[5]>=resultado[6])
{
resultado[8] = resultado[5];
}
else if (resultado[6]>resultado[5])
{
resultado[8] = resultado[6];
}
if(resultado[6]>=resultado[7])
{
resultado[9] = resultado[6];
}
else if (resultado[7]>resultado[6])
{
resultado[9] = resultado[7];
}
if(resultado[8]>=resultado[9])
{
maximo = resultado[8];
}
else if (resultado[9]>resultado[8])
{
maximo = resultado[9];
return maximo;
}
}
float defusificacion(float yb, float ypb, float ym, float ypt, float yt);
float salida;
float xb2;
float xpb1;
float xpb2;
float xm1;
float xm2;
float xpt1;
float xpt2; 
float xt1;
float xt2;
float ypm1;
float ypm2;
float ypm3;
float ypm4;
float pm1;
float pm2;
float pm3;
float pm4;
if(yb>0 && ypb<=0 && ym<=0 && ypt<=0 && yt<=0)
{
xt2 = 100;
xb2=-15*yb+25;
xpb1=0;
xpb2=0;
xm1=0;
xm2=0;
xpt1=0;
xpt2=0;
xt1=0;
pm1=0;
pm2=0;
pm3=0;
pm4=0;
salida = (xb2*yb)/(2*yb);
} 
else if(yb<=0 && ypb>0 && ym<=0 && ypt<=0 && yt<=0)
{
xb2=0;
xpb1=15*ypb+15;
xpb2=-15*ypb+45;
xm1=0;
xm2=0;
xpt1=0;
xpt2=0;
xt1=0;
pm1=0;
pm2=0;
pm3=0;
pm4=0;
salida = ((xpb1+xpb2)*ypb)/(2*ypb);
} 
else if(yb<=0 && ypb<=0 && ym>0 && ypt<=0 && yt<=0)
{
xb2=0;
xpb1=0;
xpb2=0;
xm1=15*ym+35;
xm2=-15*ym+65;
xpt1=0;
xpt2=0;
xt1=0;
pm1=0;
pm2=0;
pm3=0;
pm4=0;
salida = ((xm1+xm2)*ym)/(2*ym);
} 
else if(yb<=0 && ypb<=0 && ym<=0 && ypt>0 && yt<=0)
{
xb2=0;
xpb1=0;
xpb2=0;
xm1=0;
xm2=0;
xpt1=15*ypt+55;
xpt2=-15*ypt+85;
xt1=0;
pm1=0;
pm2=0;
pm3=0;
pm4=0;
salida = ((xpt1+xpt2)*ypt)/(2*ypt);
} 
else if(yb<=0 && ypb<=0 && ym<=0 && ypt<=0 && yt>0)
{
xb2=0;
xpb1=0;
xpb2=0;
xm1=0;
xm2=0;
xpt1= 0;
xpt2=0;
xt1=15*yt+75;
pm1=0;
pm2=0;
pm3=0;
pm4=0;
salida = ((xt1+xt2)*yt)/(2*yt);
}
else if(yb != 0 && ypb != 0)
{
if(yb < 0.33 && ypb < 0.33)
{
if(yb=ypb)
{
xb2=0;
xpb1=0;
xpb2=-15*ypb+45;
ypm1 = 0;
pm1 = 0;
} 
else if(yb<ypb)
{
xb2=15*yb+15;
xpb1=15*ypb+15;
xpb2=-15*ypb+45;
ypm1 = 0;
pm1 = 0;
} 
else if(ypb<yb)
{
xb2=-15*yb+25;
xpb1=-15*ypb+25;
xpb2=-15*ypb+45;
ypm1 = 0;
pm1 = 0;
}
} 
else if(yb < 0.33 && ypb > 0.33)
{
xb2=15*yb+15;
xpb1=15*ypb+15;
xpb2=-15*ypb+45;
ypm1 = 0;
pm1=0;
}
else if(yb > 0.33 && ypb < 0.33){
xb2=-15*yb+25;
xpb1=-15*ypb+25;
xpb2=-15*ypb+45;
ypm1 = 0;
pm1=0;
}
else if(yb > 0.33 && ypb > 0.33)
{
xb2=-15*yb+25;
ypm1=0.33;
pm1=20;
xpb1=15*ypb+15;
xpb2=-15*ypb+45;
}
salida = ((xb2*yb)+(xpb1+xpb2)*ypb+(pm1*ypm1))/(2*yb+2*ypb+ypm1);
}
else if(ypb != 0 && ym != 0){
if(ypb < 0.33 && ym < 0.33){
if(ypb=ym){
xpb1=15*ypb+15;
xpb2=0;
xm1=0;
xm2=-15*ym+65;
ypm2 = 0;
pm2=0;
}
else if(ypb<ym)
{
xpb1=15*ypb+15;
xpb2=15*ypb+35;
xm1=15*ym+35;
xm2=-15*ym+65;
ypm2 = 0;
pm2=0;
}
else if(ypb>ym)
{
xpb1=15*ypb+15;
xpb2=-15*ypb+45;
xm1=-15*ym+45;
xm2=-15*ym+65;
ypm2 = 0;
pm2=0;
}
} 
else if(ypb < 0.33 && ym > 0.33)
{
xpb1=15*ypb+15;
xpb2=15*ypb+35;
xm1=15*ym+35;
xm2=-15*ym+65;
ypm2 = 0;
pm2=0;
} 
else if(ypb > 0.33 && ym < 0.33)
{
xpb1=15*ypb+15;
xpb2=-15*ypb+45;
xm1=-15*ym+45;
xm2=-15*ym+65;
ypm2 = 0;
pm2=0;
}
else if(ypb > 0.33 && ym > 0.33)
{
xpb1=15*ypb+15;
xpb2=-15*ypb+45;
ypm2=0.33;
pm2=40;
xm1=15*ym+35;
xm2=-15*ym+65;
}
salida = ((xpb1+xpb2)*ypb+(xm1+xm2)*ym+(pm2*ypm2))/(2*ypb+2*ypm2);
}
else if(ym != 0 && ypt != 0)
{
if(ym < 0.33 && ypt < 0.33)
{
if(ym=ypt)
{
xm1=15*ym+35;
xm2=0;
xpt1=0;
xpt2=-15*ypt+85;
ypm3 = 0;
pm3=0;
}
else if(ym < ypt)
{
xm1=15*ym+35;
xm2=15*ym+55;
xpt1=15*ypt+55;
xpt2=-15*ypt+85;
ypm3 = 0;
pm3=0;
}
else if(ym > ypt)
{
xm1=15*ym+35;
xm2=-15*ym+65;
xpt1=-15*ypt+65;
xpt2=-15*ypt+85;
ypm3 = 0;
pm3=0;
}
}
else if(ym < 0.33 && ypt > 0.33)
{
xm1=15*ym+35;
xm2=15*ym+55;
xpt1=15*ypt+55;
xpt2=-15*ypt+85;
ypm3 = 0;
pm3=0;
}
else if(ym > 0.33 && ypt < 0.33)
{
xm1=15*ym+35;
xm2=-15*ym+65;
xpt1=-15*ypt+65;
xpt2=-15*ypt+85;
ypm3 = 0;
pm3=0;
}
else if(ym > 0.33 && ypt > 0.33)
{
xm1=15*ym+35;
xm2=-15*ym+65;
ypm3 = 0.33;
pm3=60;
xpt1=15*ypt+65;
xpt2=-15*ypt+85;
}
salida = ((xm1+xm2)*ym+(xpt1+xpt2)*ypt+(pm3*ypm3))/(2*ym+2*ypt+ypm3);
}
else if(ypt != 0 && yt != 0)
{
if(ypt < 0.33 && yt < 0.33)
{
if(ypt=yt)
{
xpt1=15*ypt+55;
xpt2=0;
xt1=0;
ypm4 = 0;
pm4=0;
}
else if(ypt<yt)
{
xpt1=15*ypt+55;
xpt2=15*ypt+75;
xt1=15*yt+75;
ypm4 = 0;
pm4=0;
}
else if(ypt>yt)
{
xpt1=15*ypt+55;
xpt2=-15*ypt+85;
xt1=-15*yt+85;
ypm4 = 0;
pm4=0;
}
}
else if(ypt < 0.33 && yt > 0.33)
{
xpt1=15*ypt+55;
xpt2=15*ypt+75;
xt1=15*yt+75;
ypm4 = 0;
pm4=0;
} 
else if(ypt > 0.33 && yt < 0.33)
{
xpt1=15*ypt+55;
xpt2=-15*ypt+85;
xt1=-15*yt+85;
ypm4 = 0;
pm4=0;
}
else if(ypt > 0.33 && yt > 0.33)
{
xpt1=15*ypt+55;
xpt2=-15*ypt+85;
ypm4=0.33;
pm4=80;
xt1=15*yt+75;
}
salida = ((xpt1+xpt2)*ypt+(xt1+xt2)*yt+(pm4*ypm4))/(2*ypt+2*yt+ypm4);
}
return salida;
}
// configuracion del LCD
sbit LCD_RS at RC4_bit;
sbit LCD_EN at RC5_bit;
sbit LCD_D4 at RC0_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D7 at RC3_bit;
sbit LCD_RS_Direction at TRISC4_bit;
sbit LCD_EN_Direction at TRISC5_bit;
sbit LCD_D4_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D6_Direction at TRISC2_bit;
sbit LCD_D7_Direction at TRISC3_bit;
//PUERTO PARA EL KEYPAD4X4
char keypadPort at PORTD;
//VARIABLES GLOBALES
unsigned short kp;
int proced, paso, datotemp, datotempdec, cntpd, pos;
float settemp, setpoint, temp, tempdec, sensor, error;
float dato[3];
float dec[3];
float regla[15];
float ConjuntoTemperatura[3];
float ConjuntoError[5];
float yb, ypb, ym, ypt, yt, valorsalida;
char *txt;
void main() 
{
LCD_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Keypad_Init();
UART1_Init(9600);
PORTB = 0X00;
TRISB = 0;
Delay_ms(100);
//Declaración de variables.
kp = 0;
proced = 0;
paso = 0;
pos = 33;
settemp = 0;
datotemp = 0;
cntpd = 0;
datotempdec = 0;
temp = 0;
tempdec = 0;
settemp = 0;
error = 0;
dato[1] = 0;
dato[2] = 0;
dato[3] = 0;
dec[1] = 0;
dec[2] = 0;
dec[3] = 0;
regla[0]=0;
regla[1]=0;
regla[2]=0;
regla[3]=0;
regla[4]=0;
regla[5]=0;
regla[6]=0;
regla[7]=0;
regla[8]=0;
regla[9]=0;
regla[10]=0;
regla[11]=0;
regla[12]=0;
regla[13]=0;
regla[14]=0;
ConjuntoTemperatura[0]=0;
ConjuntoTemperatura[1]=0;
ConjuntoTemperatura[2]=0;
ConjuntoTemperatura[3]=0;
ConjuntoError[0] = 0;
ConjuntoError[1] = 0;
ConjuntoError[2] = 0;
ConjuntoError[3] = 0;
ConjuntoError[4] = 0;
ConjuntoError[5] = 0;
yb=0;
ypb=0;
ym=0;
ypt=0;
yt=0;
valorsalida = 0;
while(1)
{
txt = " ";
kp = Keypad_Key_Click();
delay_ms(150);
//Preparando Valor de Salida, para tranformarlo a ASCII
switch (kp) {
case 1: kp = 49; break; // 1
case 2: kp = 50; break; // 2
case 3: kp = 51; break; // 3
case 4: kp = 11; break; //
case 5: kp = 52; break; // 4
case 6: kp = 53; break; // 5
case 7: kp = 54; break; // 6
case 8: kp = 12; break; // IncTemp
case 9: kp = 55; break; // 7
case 10: kp = 56; break; // 8
case 11: kp = 57; break; // 9
case 12: kp = 13; break; // DecTemp
case 13: kp = 10; break; // Puntodecimal
case 14: kp = 48; break; // 0
case 15: kp = 15; break; // SetTemp
case 16: kp = 14; break; // Borrar
}
//IMPRESIÓN DEL VALOR NUMÉRICO ENTERO
if(proced==0)
{
Lcd_Out(1,1, "--------------------");
Lcd_Out(2,1, "* Control - DIFUSO *");
Lcd_Out(1,21,"Ingrese (T):");
Lcd_Out(2,21,"--------------------");
if (kp>=48 && kp<58 && datotemp<=2)
{
datotemp++;
if(datotemp>=1)
{
dato[datotemp] = kp-48;
Lcd_Chr(1,pos=pos+1,dato[datotemp]+48);
}
}
}
//IMPRESIÓN DEL PUNTO DECIMAL
if(kp==10)
{
cntpd++;
paso=1;
if(cntpd==1)
{
Lcd_Chr(1,pos=pos+1,\'.\');
}
}
//IMPRESIÓN DEL DATO DECIMÁL
if(paso==1 && kp>=48 && kp<58)
{
datotempdec++;
dec[datotempdec] = kp-48;
Lcd_Chr(1,pos=pos+1,dec[datotempdec]+48);
}
if(kp==15)
{
if(datotemp>0)
{
if(datotemp==1) temp = dato[1];
if(datotemp==2) temp = dato[2] + (10*dato[1]);
if(datotemp==3) temp = dato[3] + (10*dato[2]) + (100*dato[1]);
}
if(datotempdec>0)
{
if(datotempdec==1) tempdec = dec[1]/10;
if(datotempdec==2) tempdec = dec[1]/10+dec[2]/100;
if(datotempdec==3) tempdec = dec[1]/10+dec[2]/100+dec[3]/1000;
}
settemp = (temp+tempdec);
Lcd_Cmd(_LCD_CLEAR);
if(settemp<50)
{
Lcd_out(1,1, " Fuera de Rango");
Lcd_out(2,1, " Ingrese nuevo valor");
Lcd_out(1,20," > 50 ");
delay_ms(1000);
kp=14;
}
if(settemp>100)
{
Lcd_out(1,1," Fuera de Rango");
Lcd_out(2,1," Ingrese nuevo valor");
Lcd_out(1,20," <100 ");
delay_ms(1000);
kp=14;
}
}
if(settemp >= 50 && settemp <= 100)
{
settemp = settemp;
delay_ms(50);
proced=1;
}
if(proced==1)
{
Lcd_Out(1,1, "Setpoint:");
Lcd_Out(2,1, "Sensor :");
Lcd_Out(1,21,"Error :");
Lcd_Out(2,21,"Salida :");
Lcd_Out(1,19, " C");
Lcd_Out(2,19, " C");
Lcd_Out(1,39, " u");
Lcd_Out(2,30, " %");
proced=2;
}
if(proced==2)
{
//Lectura setpoint
floattostr(settemp,txt);
Lcd_out(1,11,txt);
delay_ms(50);
//Lectura del valor de temperatura del sensor
sensor = ((Sensortemp()/10)*0.1411)+1.54;
floattostr(sensor,txt);
Lcd_out(2,11,txt);
delay_ms(50);
//Segunda entrada para el control difuso - Cálculo del error
error = (sensor-settemp);
floattostr(error,txt);
Lcd_out(1,31,txt);
delay_ms(50);
//FUZZYFICACIÓN
//Conjunto Temperatura
ConjuntoTemperatura[0] = Funcion_TCaliente(settemp);
ConjuntoTemperatura[1] = Funcion_TAlta(settemp);
ConjuntoTemperatura[2] = Funcion_TMuyAlta(settemp);
//Conjunto Error
ConjuntoError[0] = Funcion_ENegativo(error);
ConjuntoError[1] = Funcion_ENegativoBajo(error);
ConjuntoError[2] = Funcion_EModerado(error);
ConjuntoError[3] = Funcion_EPositivoBajo(error);
ConjuntoError[4] = Funcion_EPositivo(error);
delay_ms(50);
//DEFINICIÓN DE REGLAS DE INFERENCIA APLICANDO EL MINIMO
if(TEMP_ES_CALIENTE && ERROR_ES_NEGATIVO)
{
regla[0] = Obtener_Minimo(ConjuntoTemperatura[0],ConjuntoError[0]);
} 
else regla[0] = 0;
if(TEMP_ES_CALIENTE && ERROR_ES_NEGATIVOBAJO)
{
regla[1] = Obtener_Minimo(ConjuntoTemperatura[0],ConjuntoError[1]);
}
else regla[1] = 0;
if(TEMP_ES_CALIENTE && ERROR_ES_MODERADO)
{
regla[2] = Obtener_Minimo(ConjuntoTemperatura[0],ConjuntoError[2]);
}
else regla[2] = 0;
if(TEMP_ES_CALIENTE && ERROR_ES_POSITIVOBAJO)
{
regla[3] = Obtener_Minimo(ConjuntoTemperatura[0],ConjuntoError[3]);
}
else regla[3] = 0;
if(TEMP_ES_CALIENTE && ERROR_ES_POSITIVO)
{
regla[4] = Obtener_Minimo(ConjuntoTemperatura[0],ConjuntoError[4]);
} 
else regla[4] = 0;
if(TEMP_ES_ALTA && ERROR_ES_NEGATIVO)
{
regla[5] = Obtener_Minimo(ConjuntoTemperatura[1],ConjuntoError[0]);
}
else regla[5] = 0;
if(TEMP_ES_ALTA && ERROR_ES_NEGATIVOBAJO)
{
regla[6] = Obtener_Minimo(ConjuntoTemperatura[1], ConjuntoError[1]);
}
else regla[6] = 0;
if(TEMP_ES_ALTA && ERROR_ES_MODERADO)
{
regla[7] = Obtener_Minimo(ConjuntoTemperatura[1], ConjuntoError[2]);
}
else regla[7] = 0;
if(TEMP_ES_ALTA && ERROR_ES_POSITIVOBAJO)
{
regla[8] = Obtener_Minimo(ConjuntoTemperatura[1], ConjuntoError[3]);
}
else regla[8] = 0;
if(TEMP_ES_ALTA && ERROR_ES_POSITIVO)
{
regla[9] = Obtener_Minimo(ConjuntoTemperatura[1], ConjuntoError[4]);
}
else regla[9] = 0;
if(TEMP_ES_MUYALTA && ERROR_ES_NEGATIVO)
{
regla[10] = Obtener_Minimo(ConjuntoTemperatura[2], ConjuntoError[0]);
}
else regla[10] = 0;
if(TEMP_ES_MUYALTA && ERROR_ES_NEGATIVOBAJO)
{
regla[11] = Obtener_Minimo(ConjuntoTemperatura[2], ConjuntoError[1]);
}
else regla[11] = 0;
if(TEMP_ES_MUYALTA && ERROR_ES_MODERADO)
{
regla[12] = Obtener_Minimo(ConjuntoTemperatura[2],ConjuntoError[2]);
}
else regla[12] = 0;
if(TEMP_ES_MUYALTA && ERROR_ES_POSITIVOBAJO)
{
regla[13] = Obtener_Minimo(ConjuntoTemperatura[2],ConjuntoError[3]);
}
else regla[13] = 0;
if(TEMP_ES_MUYALTA && ERROR_ES_POSITIVO)
{
regla[14] = Obtener_Minimo(ConjuntoTemperatura[2],ConjuntoError[4]);
} 
else regla[14] = 0;
 
if(TEMP_ES_MUYALTA && ERROR_ES_POSITIVO)
{
regla[15]=Obtener_Minimo(ConjuntoTemperatura[2],ConjuntoError[5]);
}
else regla [15];
delay_ms(50);
//OBTENCIÓN DEL MÁXIMO
//SALIDA BAJA
yb = Obtener_Maximo(regla[4],regla[9],regla[14],0,0);
//SALIDA PARCIAL BAJA
ypb = Obtener_Maximo(regla[3],regla[8],regla[13],0,0);
//SALIDA PARCIAL MEDIA
ym = Obtener_Maximo(regla[2],regla[7],regla[12],0,0);
//SALIDA PARCIAL TOTAL
ypt = Obtener_Maximo(regla[1],regla[6],regla[11],0,0);
//SALIDA TOTAL
yt = Obtener_Maximo(regla[0],regla[5],regla[10],0,0);
delay_ms(50);
valorsalida = defusificacion(yb,ypb,ym,ypt,yt);
if (valorsalida >=0 && valorsalida<=100)
{
floattostr(valorsalida,txt);
Lcd_out(2,31,txt);
PORTB = (valorsalida*255)/100;
delay_ms(100);
proced=3;
}
}
if(proced==3)
{
UART1_Write(\'A\');
UART1_Write(settemp);
UART1_Write(sensor);
UART1_Write(valorsalida);
delay_ms(250);
proced = 2;
}
if(kp==14){
kp = 0;
paso=0;
pos = 33;
dato[0] = 0;
dato[1] = 0;
dato[2] = 0;
dec[0] = 0;
dec[1] = 0;
dec[2] = 0;
temp = 0;
tempdec = 0;
settemp = 0;
error = 0;
valorsalida = 0;
datotemp = 0;
cntpd = 0;
datotempdec = 0;
ConjuntoTemperatura[1]=0;
ConjuntoTemperatura[2]=0;
ConjuntoTemperatura[3]=0;
ConjuntoError[1] = 0;
ConjuntoError[2] = 0;
ConjuntoError[3] = 0;
ConjuntoError[4] = 0;
ConjuntoError[5] = 0;
regla[0]=0;
regla[1]=0;
regla[2]=0;
regla[3]=0;
regla[4]=0;
regla[5]=0;
regla[6]=0;
regla[7]=0;
regla[8]=0;
regla[9]=0;
regla[10]=0;
regla[11]=0;
regla[12]=0;
regla[13]=0;
regla[14]=0;
yb=0;
ypb=0;
ym=0;
ypt=0;
yt=0;
Lcd_Cmd(_LCD_CLEAR);
delay_ms(250);
proced = 0;
}
}
} ...
 
Última edición por un moderador:
#2
Por favor, reedita tu mensaje. Selecciona todo el código y mételo entre marcas PHP, para que la web lo coloree. Y eso ya te dará una pista de dónde está el error.
 
Arriba