Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

05/05/2015 #1


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

Código 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 &&ampvalor<=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 &&ampvalor<70)
{
return 
EC_TALTAPOS(valor);
}
 
else if(
valor>=70 &&ampvalor<80)
{
return 
1;
}
else if(
valor>=80 &&ampvalor<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 &&ampvalor<=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) &&ampvalor<(-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) &&ampvalor<(-0.5))
{
return 
EC_NEGATIVOBAJOPOS(valor);
}
else if(
valor>=(-0.5) &&ampvalor<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) &&ampvalor<0)
{
return 
EC_MODERADOPOS(valor);
}
else if(
valor>=&&ampvalor<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>=&&ampvalor<0.5)
{
return 
EC_POSITIVOBAJOPOS(valor);
}
else if(
valor>=0.5 &&ampvalor<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 &&ampvalor<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_setpointfloat 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 v1float v2float v3float v4float 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 ybfloat ypbfloat ymfloat yptfloat 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>&&ampypb<=&&ampym<=&&ampypt<=&&ampyt<=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<=&&ampypb>&&ampym<=&&ampypt<=&&ampyt<=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<=&&ampypb<=&&ampym>&&ampypt<=&&ampyt<=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<=&&ampypb<=&&ampym<=&&ampypt>&&ampyt<=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<=&&ampypb<=&&ampym<=&&ampypt<=&&ampyt>0)
{
xb2=0;
xpb1=0;
xpb2=0;
xm1=0;
xm2=0;
xpt10;
xpt2=0;
xt1=15*yt+75;
pm1=0;
pm2=0;
pm3=0;
pm4=0;
salida = ((xt1+xt2)*yt)/(2*yt);
}
else if(
yb != &&ampypb != 0)
{
if(
yb &lt0.33 &&ampypb &lt0.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 &lt0.33 &&ampypb &gt0.33)
{
xb2=15*yb+15;
xpb1=15*ypb+15;
xpb2=-15*ypb+45;
ypm1 0;
pm1=0;
}
else if(
yb &gt0.33 &&ampypb &lt0.33){
xb2=-15*yb+25;
xpb1=-15*ypb+25;
xpb2=-15*ypb+45;
ypm1 0;
pm1=0;
}
else if(
yb &gt0.33 &&ampypb &gt0.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 != &&ampym != 0){
if(
ypb &lt0.33 &&ampym &lt0.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 &lt0.33 &&ampym &gt0.33)
{
xpb1=15*ypb+15;
xpb2=15*ypb+35;
xm1=15*ym+35;
xm2=-15*ym+65;
ypm2 0;
pm2=0;

else if(
ypb &gt0.33 &&ampym &lt0.33)
{
xpb1=15*ypb+15;
xpb2=-15*ypb+45;
xm1=-15*ym+45;
xm2=-15*ym+65;
ypm2 0;
pm2=0;
}
else if(
ypb &gt0.33 &&ampym &gt0.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 != &&ampypt != 0)
{
if(
ym &lt0.33 &&ampypt &lt0.33)
{
if(
ym=ypt)
{
xm1=15*ym+35;
xm2=0;
xpt1=0;
xpt2=-15*ypt+85;
ypm3 0;
pm3=0;
}
else if(
ym &ltypt)
{
xm1=15*ym+35;
xm2=15*ym+55;
xpt1=15*ypt+55;
xpt2=-15*ypt+85;
ypm3 0;
pm3=0;
}
else if(
ym &gtypt)
{
xm1=15*ym+35;
xm2=-15*ym+65;
xpt1=-15*ypt+65;
xpt2=-15*ypt+85;
ypm3 0;
pm3=0;
}
}
else if(
ym &lt0.33 &&ampypt &gt0.33)
{
xm1=15*ym+35;
xm2=15*ym+55;
xpt1=15*ypt+55;
xpt2=-15*ypt+85;
ypm3 0;
pm3=0;
}
else if(
ym &gt0.33 &&ampypt &lt0.33)
{
xm1=15*ym+35;
xm2=-15*ym+65;
xpt1=-15*ypt+65;
xpt2=-15*ypt+85;
ypm3 0;
pm3=0;
}
else if(
ym &gt0.33 &&ampypt &gt0.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 != &&ampyt != 0)
{
if(
ypt &lt0.33 &&ampyt &lt0.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 &lt0.33 &&ampyt &gt0.33)
{
xpt1=15*ypt+55;
xpt2=15*ypt+75;
xt1=15*yt+75;
ypm4 0;
pm4=0;

else if(
ypt &gt0.33 &&ampyt &lt0.33)
{
xpt1=15*ypt+55;
xpt2=-15*ypt+85;
xt1=-15*yt+85;
ypm4 0;
pm4=0;
}
else if(
ypt &gt0.33 &&ampyt &gt0.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 procedpasodatotempdatotempdeccntpdpos;
float settempsetpointtemptempdecsensorerror;
float dato[3];
float dec[3];
float regla[15];
float ConjuntoTemperatura[3];
float ConjuntoError[5];
float ybypbymyptytvalorsalida;
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 
1kp 49; break; // 1
case 2kp 50; break; // 2
case 3kp 51; break; // 3
case 4kp 11; break; //
case 5kp 52; break; // 4
case 6kp 53; break; // 5
case 7kp 54; break; // 6
case 8kp 12; break; // IncTemp
case 9kp 55; break; // 7
case 10kp 56; break; // 8
case 11kp 57; break; // 9
case 12kp 13; break; // DecTemp
case 13kp 10; break; // Puntodecimal
case 14kp 48; break; // 0
case 15kp 15; break; // SetTemp
case 16kp 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 &&ampkp<58 &&ampdatotemp<=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;
}
}
} ... 
05/05/2015 #2

Avatar de JoaquinFerrero

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.
05/05/2015 #3
Moderador general

Avatar de DOSMETROS

Hecho
05/05/2015 #4

Avatar de JoaquinFerrero

Sí, pero el código sigue con los >, & y demás familia.

Que trabaje un poquito el nuevo usuario, por favor
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.