Display com algumas letras piscando

Boa noite! Esta foi a primeira vez que programei um Arduino, é pra fazer um equipamento que vai medir a altitude de um trike, coloquei o display 16x2 com o i2c e um barômetro bmp180, programei e funcionou, a única coisa que está me incomodando ´q que os escritos da 1 tela e a 1 linha da segunda tela estão piscando como se estivesse apagando e reescrevendo rapidamente, já na segunda linha da segunda tela isso não acontece, procurei por algum lcd.clear no inicio dos prints das linhas mas não achei, então não estou conseguindo achar o problema...
alguém faz ideia de como resolvo isso?

// Equipamento básico de voo para trike
// Desenvolvido por Celso Judson T B Ferreira

// === Bibliotecas === //
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TimerOne.h>
#include <Adafruit_BMP085.h>


// DEFINIÇÕES
#define endereco  0x27 // Endereço do display lcd
#define colunas   16
#define linhas    2

// INSTANCIANDO OBJETOS
LiquidCrystal_I2C lcd(endereco, colunas, linhas);
Adafruit_BMP085 bmp180;


#define botao_MAIS 2                  //define o botão no pino 2 (MAIS)
#define botao_ENTER 3                 //define o botão no pino 3 (ENTER/VOLTAR)
#define botao_MENOS 4                 //define o botão no pino 4 (MENOS)
bool L_botao_MAIS = 1;                //variável para fazer a leitura do botão              (MAIS)
bool LA_botao_MAIS = 1;               //variável para verificar a leitura anterior do botão (MAIS)
bool L_botao_ENTER = 1;               //variável para fazer a leitura do botão              (ENTER/VOLTAR)
bool LA_botao_ENTER = 1;              //variável para verificar a leitura anterior do botão (ENTER/VOLTAR)
bool L_botao_MENOS = 1;               //variável para fazer a leitura do botão              (MENOS)
bool LA_botao_MENOS = 1;              //variável para verificar a leitura anterior do botão (MENOS)

//Variaveis

int tela = 1;                         //variável para controlar a mudança de tela no menu
int AltCorrige = 0;                   //variável de correção de altitude em metros
int PressCorrige = 0;                 //variavel de correção da pressão em pascal

 
void setup(){ 
 pinMode(botao_MAIS, INPUT_PULLUP);   //define o botao (MAIS) como uma entrada pull up
 pinMode(botao_ENTER, INPUT_PULLUP);  //define o botao (ENTER/VOLTAR) como uma entrada pull up
 pinMode(botao_MENOS, INPUT_PULLUP);  //define o botao (MENOS) como uma entrada pull up
 lcd.init ();                    //inicia o display 16x2
 lcd.backlight();
// lcd.clear();                       //limpa todos os caracteres do lcd
   lcd.setCursor(0,0);                //posiciona o cursor no display (caracter, linha)      
   lcd.print(F(" Trikes Thor "));  //imprime o texto entre aspas  
   lcd.setCursor(0,1);                //posiciona o cursor no display (caracter, linha)      
   lcd.print(F(" Open system...   "));  //imprime o texto entre aspas 
 delay (5000);                        //pausa o programa por 5 segundos
// lcd.clear();
 lcd.noBacklight();
 delay(1000);
 lcd.backlight();
    if (!bmp180.begin()) 
  {
    lcd.println("Falha no sensor!!!");
    while (1) {}
  }
 }
 
void loop(){
 
// === Ações no display LCD === // 
   if (tela==1){                          //se a variável tela for igual a MAIS, faça...
       lcd.setCursor(0,0);
       lcd.print("                ");
       lcd.setCursor(0,0);
       lcd.print("Alt: ");
       lcd.print(((bmp180.readAltitude() + AltCorrige) * 3,28084));
       lcd.print(" Ft");
       lcd.setCursor(0, 1);
       lcd.print("                ");
       lcd.setCursor(0, 1);
       lcd.print("Press.: ");
       lcd.print((bmp180.readPressure() + (PressCorrige * 100)));  
       lcd.print(" Pa");

   }
   else if (tela==2){                            
       lcd.setCursor(0,0);
       lcd.print("                ");
       lcd.setCursor(0,0);
       lcd.print("Altit.: ");
       lcd.print(bmp180.readAltitude() + AltCorrige);
       lcd.print(" m"); 
       lcd.setCursor(0,1);
   lcd.print("Temp. :  ");
    if ( bmp180.readTemperature() < 10)
     {
       lcd.print(" "); 
       lcd.print(bmp180.readTemperature());
     }
   else
     {
       lcd.print(bmp180.readTemperature(),1);
     }
   lcd.print(" ");
   lcd.print((char)223); 
   lcd.print("C   ");
   }
   else if (tela==10){                            
   lcd.setCursor(0,0);                    //posiciona o cursor no display (caracter, linha)      
   lcd.print(F("   << MENU >>   "));      //imprime o texto entre aspas 
   lcd.setCursor(0,1);                    //posiciona o cursor no display (caracter, linha)      
   lcd.print(F("Corrige altitude"));      //imprime o texto entre aspas    
   }
   else if (tela==11){                            
   lcd.setCursor(0,0);                     
   lcd.print(F("   << MENU >>   "));      
   lcd.setCursor(0,1);                     
   lcd.print(F("Corrige pressão"));     
   }
   else if (tela==101){  
   lcd.setCursor(0,0);                           
   lcd.print(F(" Corrige Altitude"));      
   lcd.setCursor(0,1);                     
   lcd.print(AltCorrige);
   lcd.print(F("Mts"));     
   }
   else if (tela==111){
   lcd.setCursor(0,0);                           
   lcd.print(F(" Corrige Pressão"));      
   lcd.setCursor(0,1);                     
   lcd.print(PressCorrige);
   lcd.print(F("hPa"));       
   }
   
/////////////////////////////////////////////////

// === Ações do Botão MAIS === //    ////////////
  L_botao_MAIS = digitalRead(botao_MAIS);
  if (!L_botao_MAIS && LA_botao_MAIS) {
       if (tela==1)tela=2;
       else if (tela==2)tela=1; 
       else if (tela==10)tela=11;
       else if (tela==11)tela=10;
       else if (tela==101){
         AltCorrige = AltCorrige + 1;
         }
       else if (tela==111){
         PressCorrige = PressCorrige + 1;
         }
       delay(30);}                         
  LA_botao_MAIS = L_botao_MAIS; 


/////////////////////////////////////////////////

// === Ações do Botão MENOS === //   ////////////
  L_botao_MENOS = digitalRead(botao_MENOS);
  if (!L_botao_MENOS && LA_botao_MENOS) {
       if (tela==1)tela=2;
       else if (tela==2)tela=1; 
       else if (tela==10)tela=11;
       else if (tela==11)tela=10;
       else if (tela==101){
         AltCorrige = AltCorrige - 1;
         }
       else if (tela==111){
         PressCorrige = PressCorrige - 1;
         }
       delay(30);}                         
  LA_botao_MENOS = L_botao_MENOS;

     
/////////////////////////////////////////////////

// === Ações do Botão ENTER === //   ////////////
  L_botao_ENTER = digitalRead(botao_ENTER);
  if (!L_botao_ENTER && LA_botao_ENTER) {
       if (tela==1)tela=10;
       else if (tela==2)tela=10;
       else if (tela==10)tela=101;
       else if (tela==101)tela=1;
       else if (tela==11)tela=111;
       else if (tela==111)tela=1;         
       delay(30);}                         
  LA_botao_ENTER = L_botao_ENTER;
     
    

}
    

Isso acontece porque é exactamente o que estás a dizer ao Arduino para fazer... Quando dás esta instrução:

lcd.print("                ");

Estás a dizer ao Arduino para apagar essa linha. E como estás a fazer isso de forma seguida, torna o piscar ainda mais visível.

Para resolveres isto crias uma função que recebe os parâmetros a mostrar no display e só chamas essa função de segundo a segundo ou meio segundo em meio segundo ou se houver uma alteração (como o utilizador carregar num botão).

Depois para minimizar ainda mais o piscar, não apagues a linha toda.

Em vez de fazeres isto:

lcd.setCursor(0,0);
       lcd.print("                ");
       lcd.setCursor(0,0);
       lcd.print("Alt: ");

Porque não fazeres:

void setup () {
       lcd.setCursor(0,0);
       lcd.print("Alt:            ");
}

void loop(){

       lcd.setCursor(5,0);
       lcd.print(((bmp180.readAltitude() + AltCorrige) * 3,28084));
}

Mas o importante é só chamares a função para escrever no LCD de x em x tempo em vez de o fazeres da forma que estás a fazer agora.