Lcd no actualiza

Buenos días y disculpen la banalidad de la pregunta, pero estoy aprendiendo.

sensors.requestTemperatures();
    Sensor_Agua = sensors.getTempCByIndex(0);
    lcd.setCursor(3, 0);
    lcd.print("-AGUA MACERADO-");
    lcd.setCursor(15, 1);
    lcd.print(Sensor_Agua);

    //// CONDICION: AGUA DE MACERADO ES A x°////
    if ( Sensor_Agua < 30) {
      lcd.setCursor( 5, 3);
      lcd.print("CAL");
    }
    else if ( Sensor_Agua > 30, 5 ) {
      digitalWrite (led1_Agua_Macerado_y_Lavado, HIGH);
      lcd.setCursor(8, 3);
      lcd.print("OK");

    }

Por qué cuando el sensor está en <30 con lcd.print("CAL") y el sensor actualiza a 31 agrega OK pero no borra el "CAL".
En realidad la explicación la entiendo, porque es como que lo estoy llamando para que me avise pero no para que me deje de avisar. Entonces la pregunta sería cómo expresar eso.

Que es para ti esto

if ( Sensor_Agua > 30, 5 ) {

si quieres poner con decimales debes usar 30.5 de lo contrario no se como el compilador no te hizo algun reclamo.

¿Qué tipo de display estás utilizando?

¿Qué debe hacer tu programa cuando Sensor_Agua es exactamente igual a 30?

1 Like

Porque lo debes borrar "manualmente".
"CAL" se imprime en las posiciones 5, 6 y 7 en cambio "OK" en 8 y 9, entonces el programa hace exactamente lo que le has pedido.
Cambia las cadenas a "CAL.." y "...OK" (los puntos representan espacios) e imprime ambas en la posición 5, así una sobreescribe (y borra) a la otra.

Saludos

1 Like

El 30 .5 fue un error de tipeo a último momento

Cuando está a menos de 30 tiene que decir CAL y cuando sube a 31 tiene que decir OK y si por alguna razón , estando a 32 vuelve a bajar a 29 tiene que desaparecer OK y volver a decir CAL

Gatul tu respuesta ha sido la solución y estoy muy agradecido. Pero debo reconocer que me sorprende, que dada la complejidad de Arduino, no se pueda borrar un aviso (una palabra) sino es sobreescribiendo.
Muchas gracias, nuevamente.

Si Sensor_Agua vale 30 no se ejecuta ninguna de las dos ramas de este if

Probablemente quieras escribir algo así:

if ( Sensor_Agua < 30) {
      lcd.setCursor( 5, 3);
      lcd.print("CAL");
    }
    else { 
      //   Sensor_Agua >= 30
      digitalWrite (led1_Agua_Macerado_y_Lavado, HIGH);
      lcd.setCursor(8, 3);
      lcd.print("OK");

    }
1 Like

Gracias, por tu respuesta, ahí lo verifique, y da resultado, pero tengo que seguir sobreescribiendo porque cuando aparece el OK no desaparece el CAL

Es que lo escribes en posiciones diferentes.
Piensa la situación contraria, que quisieras imprimir en lugares distintos (como ahora) y el display no te lo permitiese porque te borrase lo ya impreso.

Saludos

Qué tiene que ver la complejidad de arduino con borrar un aviso? Nada!
Justamente los códigos son flexibles a todo lo que se nos pueda ocurrir hacer.
Es básicamente nuestra responsabilidad que las cosas salgan bien o mal.
Cuando pones cosas usando setCursor hay que ser muy cuidadoso.
En lo personal me gusta usar sprintf y un buffer y escribir toda la longitud de la línea.
COn eso evisto tener que borrarla y resolver qué hacer con caracteres anteriores.
Pero solo con buscar sprintf en la lupa encontrarás de qué te hablo.

1 Like

Como andan, hace unos días que vengo complicado con este tema y creo que encontré el problema. Me doy cuenta pero no como resolverlo.
Es un proceso de cocción que consta de 5 Bloques independientes una de las otras, con tecla "1" entramos al Bloque 1 con tecla "2" entramos al Bloque 2 , con tecla "3" al Bloque 3 y así sucesivamente .

El bloque 2 se subdivide en 2 partes (en dos proceso al mismo tiempo: Parte A y Parte B)

  • La Parte A anda bien, el sensor varia entre CAL y OK en función de la temperatura estipulada if ( Sensor_Agua <= 29) {

  • La Parte B es prácticamente lo mismo, pero con la condición que en parte se inicia cuando se apreta una tecla del teclado matricial. Y ahí es donde no anda.
    Cuando se presiona "B" del teclado el sensor hace una primer lectura y determina si es CAL o OK y queda fijo en ese valor y necesito que varíe en función de la temperatura como en la Parte A

El problema está en que solo va a funcionar en la medida que aprete "B". Apreto B hace una primer lectura, el if determina si es CAL o OK y el bucle cuando vuelve se encuentra con que B ya no está apretado.
Y acá viene la pregunta ¿ Cómo hago para que cuando apreto B ya quede habilitado, y el sensor se actualice constantemente?
Creo que entiendo cual es el error pero no me doy cuenta como resolverlo

 if ( tecla == '2') {
      secuencia = 2;
      entrada = 1;
          }
  }
  else if ( secuencia == 2 ) {
    if ( entrada == 1 ) {
      entrada = 2;
          }
    sensors.requestTemperatures();

    /////// PARTE A //////////
    lcd.setCursor(2, 0);
    lcd.print("-AGUA DE LAVADO-");
    Sensor_Agua = sensors.getTempCByIndex(0);
    lcd.setCursor(15, 1);
    lcd.print(Sensor_Agua);

    if ( Sensor_Agua <= 29) {
      lcd.setCursor( 9, 1);
      lcd.print("CAL");
      digitalWrite (led1_Agua_Macerado_y_Lavado, LOW);
    }
    else {
      digitalWrite (led1_Agua_Macerado_y_Lavado, HIGH);
      lcd.setCursor(9, 1);
      lcd.print("OK ");
    }

    /////// PARTE B //////////
    lcd.setCursor(5, 2);
    lcd.print("-MACERADO-");
    Sensor_Mosto = sensors.getTempCByIndex(1);
    lcd.setCursor(15, 3);
    lcd.print(Sensor_Mosto);

    if (tecla == 'B') {
      lcd.setCursor(15, 3);
      lcd.print(Sensor_Mosto);
      lcd.setCursor(9, 3);
      lcd.print("ON ");
      digitalWrite(led2_Macerado, HIGH);
    
      if (Sensor_Mosto <= 29) {
        lcd.setCursor(0, 3);
        lcd.print ("CAL");
        digitalWrite(led3_Recirculado, HIGH);
           }
      else {
        lcd.setCursor(0, 3);
        lcd.print ("OK ");
        digitalWrite(led3_Recirculado, LOW);
            }
    }

@nandozu No abras varios hilos para un mismo tema (ya hemos tratado parte de esto) y encima con un fragmento de código. Si no vemos el resto es difícil ayudarte. ¿O esperas que vayamos a ver el código al otro tema?
Lo correcto es que sigas consultando en tu tema primario.

Saludos

Moderador:
Ya te lo había advertido y sigues abriendo uno y varios hilos del mismo tema.
Tienes una suspención por un dia.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.