Hola de nuevo.
Quería compartir otro problema que me a surgido y no entiendo porque. Es del mismo programa. No es el problema de antes pero para no crear otro tema lo pongo aquí (supongo que no hago mal...)
El tema es que tengo la siguiente función:
float intro_var_float(float num_max, float num_min, char text[8], float increment)
{
unsigned char buf[5];
float var=0;
escriure_cmd (0x01); //Borrar LCD
escriure_cmd(0x02); //Cursor a l'inici
escriure_txt(text);
sprintf (buf, "%.2f", var);
escriure_txt (buf);
while ((_RB4 == 0)||(var == num_min))
{
if (_RA4 == 1)
{
if (var == num_max)
var = 0;
else
var= var+increment;
escriure_cmd (0x01); //Borrar LCD
escriure_cmd(0x02); //Cursor a l'inici
escriure_txt(text);
sprintf (buf, "%.2f", var);
escriure_txt (buf);
__delay_ms(300);
}
}
__delay_ms(500); //Elimina rebots pulsador
return(var);
}
El tema es que tengo dos pulsadores para entrar datos de usuario. En este caso hay que entrar el caudal de los goteros y la distancia entre goteros de la misma línea y entre las columnas. Con estos datos se calcula el caudal/m2 del sistema de riego.
Como todos los valores tiene que estar dentro de un rango pongo un valor mínimo y un valor máximo. El mínimo no permite salir de la función hasta que el valor sea superior y si una vez alcanzado el máximo se pulsa el pulsador de incremento de valor (_RA4) el valor se reinicializa a 0 i vuelta a empezar.
En el main llamo a la función
caudal = calcul_caudal_reg();
Dicha función es la siguiente
float calcul_caudal_reg ()
{
float dist_a=0, dist_b=0, c_goter=0;
escriure_cmd(0x01); //Borrar LCD
escriure_cmd(0x02); //Cursor a l'inici
escriure_txt("Intro caudal goter");
while(_RB4 == 0);
__delay_ms(500);
c_goter = intro_var_float(5, 0, "Cau goter: ", 0.5);
dist_a = intro_var_float(1, 0, "Dist a: ", 0.05);
dist_b = intro_var_float(2, 0, "Dist b: ", 0.05)
return((1/(dist_a*dist_b)*c_goter));
}
El problema que no entiendo:
- Introduzco el valor de c_goter. Si alcanzo el valor de 5 se inicializa a 0 (bien)
- Hago lo mismo para dist_a y dist_b y pasa de mi. O sea, alcanzo el valor de 1 en el primer caso y de 2 en el segundo, y el valor sigue aumentando sin inicializarse a 0.
No lo entiendo. Es la misma función, con variables float todas... no se porque si funciona para c-reg y no para dist_a i dist_b...
La única diferencia es que c-goter se incrementa 0.5 cada vez y las otras dos 0.05 cada vez... no se si está fuera de rango para comparar en una sentencia if... pero igualmente el valor de comparación es para cuando sea 1 o 2... no se, no lo entiendo.
Gracias de antemano