Buenas tardes, estoy intentando crear un proyecto para realizar el llenado de un deposito mediante electrovalvulas con agua de osmosis y agua normal con una mezcla al 50%.
El problema principal viene dado por la parte de código del llenado (función llenar) aparte de no cumplir la función algo falla, ya que aveces al terminar el proceso y volver a mostrar el menu principal la pantalla lcd de 16x2 muestra caracteres irreconocibles.
Os adjunto el codigo y os comento un poco. La mayoria de este es reciclado de otros que encontre por internet.
Las dos funciones que intervienen en el proceso que falla son estas.
En esta primera se calcula la distancia a la que esta el agua y se devuelve la resta entre la capacidad del deposito y el nivel hasta la distancia del agua. Dando como resultado la distancia que se ha llenado si no me equivoco.
float c_litros()
{
float niv = ultrasonic.Ranging(CM);
return niv_max - niv;
// float Acum = 0;
// for (int r = 0; r < 10; r++) {
// Acum = Acum + c_litros_20();
// }
//
// return niv_max - (Acum / 10); // promediar lecturas
}
y en esta se llena de agua de normal mientras el agua llenada sea menos de la mitad del total activando ECNOR (electrovalvula agua normal).
Despues se llena de agua osmosis. mientras sea mas de la mitad y hasta el final activando ECOSM
void llenar()
{
if (limpiador == true) clean(1, 1);
boolean osm , norm;
osm = false;
norm = false;
while ( c_litros() < (niv_max/2)){
print_lcd_t(0, 0, "Llenado AGUA");
print_lcd_t(1, 0, "NORMAL ......");
print_i2c_t(0,0, "LLenado: cm");
print_i2c_v(0,8, c_litros());
digitalWrite(ECNOR, LOW);
digitalWrite(ECOSM, HIGH);
norm = true;
}
digitalWrite(ECOSM, HIGH);
digitalWrite(ECNOR, HIGH);
while ( c_litros() >= (niv_max/2) && c_litros() < niv_max ){
print_lcd_t(0, 0, "Llenado AGUA");
print_lcd_t(1, 0, "OSMOSIS ......");
print_i2c_t(0,0, "LLenado: cm");
print_i2c_v(0,8, c_litros());
digitalWrite(ECNOR, HIGH);
digitalWrite(ECOSM, LOW);
osm = true;
}
digitalWrite(ECOSM, HIGH);
digitalWrite(ECNOR, HIGH);
if (limpiador == true) clean(1, 1);
while( norm == true && osm == true && StrPuls != "LEF" ){
V_LeerLineaPulsadores();
print_lcd_t(0, 0, "Deposito lleno");
print_i2c_t(0, 0, "Completado");
digitalWrite(ECOSM, HIGH);
digitalWrite(ECNOR, HIGH);
}
}
Muchas gracias por todo y en todo lo que me podais ayudar os lo agradeceria. Otro tema es la funcion para cargar caracteres en la pantalla lcd o i2c, en la lcd no i2c carga bien algunos simbolos y otros no. Muchas gracias
prueba_arduino_forum.ino (13.6 KB)