Se me borran caracteres en LCD 20x4

Buenas noches, soy un poco novato en esto de Arduino, hice un circuito para leer 4 variables pero al mostrarlas en el LCD 20x4 y se me borran unos caracteres de forma alternada en la linea 1 y 3 pero aparecen de nuevo como si parpadearan, ya probé con otro LCD, también conectándolo vía I2C y sale lo mismo así que asumo es mi código el que está mal o por desconocimiento estoy obviando algo, como cosa rara en el simulador Proteus no presenta ese problema, de antemano gracias por su ayuda.
ANDRES ALEGRIA

Mi codigo

//          ************Programa de control para invernadero **************
#include <LiquidCrystal.h> // includes the LiquidCrystal Library 
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7) 




const int LuzPin = A0;    // seleccionar la entrada para el sensor
int Ilumina;       // variable que almacena el valor raw (0 a 100%)
const int HumPin = A1;    // seleccionar la entrada para el sensor
int Humed;       // variable que almacena el valor raw (0 a 100%)
const int TemPin = A2;    // seleccionar la entrada para el sensor
int Tempe;       // variable que almacena el valor raw (10 a 80 Grados)
const int TanPin = A3;    // seleccionar la entrada para el sensor
int Tanque;       // variable que almacena el valor raw (0 a 100%)
int setTanque = 80;       // variable que almacena el valor raw (0 a 100%)
int Tempe1;
int Tempe2;
int Tempe3;
int Tempe4;
int Tempe5;

void setup() {
 // Inicializar el LCD con el número de  columnas y filas del LCD
   // Inicializar el LCD

 pinMode(10,OUTPUT); // Salida para mover la polisombra
 pinMode(11,OUTPUT); // Salida para electrovalvula de riego
 pinMode(12,OUTPUT); // Salida para Extractor de aire
 pinMode(13,OUTPUT); // Salida para electrovalvula de llenado
 
 lcd.begin(20,4);  // Escribimos el Mensaje en el LCD
 lcd.clear();    //Borra el LCD
 delay(1000);  
 lcd.print("        UNAD");
 lcd.setCursor(0,1);
 lcd.print("ADQUISICION DE DATOS");
 lcd.setCursor(0,2);
 lcd.print("     PASO FINAL  ");
  lcd.setCursor(0,3);
 lcd.print("  Grupo # 203050_6  "); 
    delay(3000); 
 lcd.clear();    //Borra el LCD
      delay(1000); 
          
 
//************************************************************
}
void loop() {

   Ilumina = analogRead(LuzPin);   // realizar la lectura de luz
 Ilumina = (Ilumina/10.24); //Ajustamos para solo leer valores entre 0 y 100
 lcd.setCursor(0,0);
 lcd.print("Ilumin="+String(Ilumina)+"%");

  if (Ilumina > 50) 
  {        digitalWrite(10, HIGH);
       lcd.setCursor(12,0);
       lcd.print("Poli=On  ");
  }
  else 
  {        digitalWrite(10, LOW);
       lcd.setCursor(12,0);
       lcd.print("Poli=Off  ");
  }
//************************************************************
Humed = analogRead(HumPin);   // realizar la lectura de humedad
 Humed = (Humed/10.24); //Ajustamos para solo leer valores entre 0 y 100
 lcd.setCursor(0,1);
 lcd.print("Humeda="+String(Humed)+"%");

  if (Humed > 30) 
  {        digitalWrite(11, HIGH);
       lcd.setCursor(12,2);
       lcd.print("Riego=On ");
  }
  else 
  {        digitalWrite(11, LOW);
       lcd.setCursor(12,2);
       lcd.print("Riego=Off");
  }
//************************************************************
Tempe = analogRead(TemPin);   // realizar la lectura de temperatura 1
Tempe1 = Tempe;
  delay(100); 

Tempe = analogRead(TemPin);   // realizar la lectura de temperatura 2
Tempe2 = Tempe;
  delay(100);  

Tempe = analogRead(TemPin);   // realizar la lectura de temperatura 3
Tempe3 = Tempe;
  delay(100); 

Tempe = analogRead(TemPin);   // realizar la lectura de temperatura 4
Tempe4 = Tempe;
  delay(100);   

Tempe = analogRead(TemPin);   // realizar la lectura de temperatura 5
Tempe5 = Tempe;
  delay(100);  

  Tempe =   (Tempe1 + Tempe2 + Tempe3 + Tempe4 + Tempe5)/5; //promediar las lecturas     

 Tempe = (Tempe * 5 * 100.0 / 1024.0); //Ajustamos para obtener valor en grados centigrados.

 lcd.setCursor(0,2);
 lcd.print("Temper="+String(Tempe)+"%");

  if (Tempe > 30) 
  {        digitalWrite(12, HIGH);
       lcd.setCursor(12,1);
       lcd.print("Extr=On  ");
  }
  else 
  {        digitalWrite(12, LOW);
       lcd.setCursor(12,1);
       lcd.print("Extr=Off   ");
  }
//************************************************************
Tanque = analogRead(TanPin);   // realizar la lectura de llenado del tanque
 Tanque = (Tanque/10.24);//Ajustamos para solo leer valores entre 0 y 100

 lcd.setCursor(0,3);
 lcd.print("tanque="+String(Tanque)+"%");
 
  if (Tanque > setTanque) 
  {        digitalWrite(13, LOW);
       lcd.setCursor(12,3);
       lcd.print("Llena=Off  ");
       setTanque = 80;
  }
  else 
  {        digitalWrite(13, HIGH);
       lcd.setCursor(12,3);
       lcd.print("Llena=On   ");
        setTanque = 90;
       
  }
    delay(500);   

 }

Lee las Normas del foro.
Como verás, he editado tu hilo de acuerdo a las mismas, en adelante espero que seas mas cuidadoso no solo con los códigos, sino con los enlaces, imágenes y demás faltas alli mencionadas.

Hola @ardusergio, bienvenido al foro Arduino.
Tu código borra las líneas porque eso es lo que has programado.
Basicamente no tiene estructura y es caótico tal como esta, pero tiene muchas cosas positivas solo que le falta orden.

Lo primero que haré será mostrarte como puedes de modo simple organizar un código y pasar de algo que no funciona a algo que si lo hace.

Cuando se leen sensores y luego se presentan, hay que conocer los tiempos que involucra hacerlo. En tu caso ya que son sensores del tipo analógicos, digamos que ese no es problema.
Asi que podemos crear un loop que diga algo asi

void loop() {

    leo_sensores();
    presentoLCD();
    control();
}

Bueno eso crea una forma límpia de enteder que hago en cada momento. Primero leo todo, y luego lo presento ordenadamente.

veamos la primer parte, o sea la lectura de sensores

void leo_sensores() {
  unsigned int tmpIlum = 0, tmpHum = 0, tmpTemp = 0, tmpTanque = 0;

  for (byte i = 0; i<5; i++) {
        tmpIlum += analogRead(LuzPin);
        tmpHum += analogRead(HumPin);
        tmpTemp += analogRead(TemPin);
        tmpTanque += analogRead(TanPin);
  }
  
  // 5 * 10.24 = 51.2 
  // porque divido x 5 porque promedio.
  Ilumina =tmpIlum /51.2;          // realizar la lectura de luz ajustada a entre 0 y 100
  Humed = tmpHum/51.2;          // realizar la lectura de humedad ajustada a entre 0 y 100
  Tempe =  tmpTemp/51.2;   // realizar la lectura de temperatura ajustada a entre 0 y 100
  Tanque = tmpTanque / 51.2;   // realizar la lectura de llenado del tanque ajustada a entre 0 y 100
}

continuará...

El final del código que espero este correcto

void presentoLCD() {
  char buffer[20];
  lcd.setCursor(0,0); 
  sprintf(buffer, "Ilumin= %3d% Poli =%3s", Ilumina, (Ilumina>50)?" ON":"OFF");
  lcd.print(buffer);
  lcd.setCursor(0,1);
  sprintf(buffer, "Humeda= %3d% Riego=%3s", Humed, (Humed > 30)?" ON":"OFF");
  lcd.print(buffer);
  lcd.setCursor(0,2);
  sprintf(buffer, "Temper= %3d% Extr =%3s", Tempe, (Tempe > 30)?" ON":"OFF");
  lcd.print(buffer);
  lcd.setCursor(0,3);
  sprintf(buffer, "Tanque= %3d% Llena=%3s", Tanque, (Tempe > setTanque)?"OFF":" ON");
  lcd.print(buffer);
}
 
void control() { 
  if (Ilumina > 50)
      digitalWrite(10, HIGH);
  else 
      digitalWrite(10, LOW);
  if (Humed > 30) 
      digitalWrite(11, HIGH);
  else 
      digitalWrite(11, LOW);
  if (Tempe > 30)
      digitalWrite(12, HIGH);
  else
      digitalWrite(12, LOW);   
  if (Tanque > setTanque) {        
      digitalWrite(13, LOW);
      setTanque = 80;
  }
  else {        
      digitalWrite(13, HIGH);
      setTanque = 90;
  }         
}

Algo que no debes hacer pero que esta bien, solo que cuando pase el tiempo dirás que era o que tiene conectado el pin 11 y el 13?
Siempre usa etiquetas o sea nombra los pines con una referencia que sea fácil de leer.

finalmente el código ha quedado a toda velocidad asi que puedes agregar un delay(500) o delay(1000) al final para hacerlo al menos mas lento.