Nível da água com arduino, LIQUIDCRYSTAL_I2C E ULTRASONIC

//############################ Sensor ultrassonico ############################
#include <Ultrasonic.h>       //Inclui a biblioteca
Ultrasonic ultrasonic(8,9);  // 1º pindo do Trigger || 2º pino do Echo
float cmMsec;

//############################ LCD ############################
#include <LiquidCrystal_I2C.h>    //Inclui a biblioteca
LiquidCrystal_I2C lcd(0x27,16,2); //Endereço, tipo de display 16po2 colunas

//###################### Variaveis e Constantes #############################
const int altura_sensor = 8;         //Altura que o sensor fica da água quando a caixa esta cheia   
const int altura_total = 58;         //Qual altura do sensor ate o fundo da caixa  
int nivel_agua;                      //Variavel para calculos  
const int buzzer = 8;                //Porta digital do Beep/buzzer


 
void setup(){
    Serial.begin(9600);               //INICIALIZA A SERIAL
    lcd.init();                       //Inicializando o LCD
    lcd.backlight();                  //Ligando o BackLight do LCD 
}




 
void loop(){
  LerDados();
  ImprimeNoLCD();
}


//#########################################################################################################
//#################################### LENDO DADOS DO SENSOR ##############################################
//#########################################################################################################
void LerDados(){
  long microsec = ultrasonic.timing();                                    //Recebendo os dados do sensor
  cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);                  //Convertendo a medida para cm 
  nivel_agua = 100 - (((cmMsec - altura_sensor) / altura_total)*100);     //Calculando:   100 menos Nivel de água dividido pela altura x 100  

  Serial.print((String)"\n"+nivel_agua +"% de agua na caixa");            //Imprimindo na serial só pra acompanhar
}


//#########################################################################################################
//#################################### IMPRIMINDO NO LCD ##############################################
//#########################################################################################################
void ImprimeNoLCD(){
  lcd.clear();                                                            //Limpando o Display
  lcd.setCursor(0, 0);                                                    //Primeiro Define a posicao depois a Linha
  lcd.print("  CAIXA D'AGUA  ");                                          //IMPRIME O TEXTO 
  lcd.setCursor(0, 1);                                                    //Primeiro Define a posicao depois a Linha 

  
  int i = nivel_agua/8;                                                   //--Dividindo por 8 o nivel da agua: Por que 8?  Dividindo 100 por 8 = 12,5 (pinto 12 posicoes do LCD),
  while(i != 0 && i > 0){                                                 //--Como o LCD tenho 16 posições as outras 4 fical para a os numeros da porcentagem: ex: (|||||||| 100%)
    lcd.write(10010111);                                                  //Escrevendo no LCD em Binário as barrinhas '10010111'
    i--;                                                                  
  }                                                                       


                           
 if(nivel_agua < - 0){                                                    //Se o nivel for MENOR que 0%
    lcd.print("|");                                                       //Imprimindo só uma Barrinha
    lcd.print((String)"     Vazia!");                                    //IMPRIME O TEXTO e concatena com espaços e %
 } 

 if(nivel_agua < 97 and nivel_agua > 0){                                  //Arredondando valores (maior que 97 e menor que 106)  ou seja entre 98 e 105
    lcd.print((String)"" +nivel_agua +"%");                               //IMPRIME O TEXTO e concatena com espaços e %
  }


 if(nivel_agua > 96 and nivel_agua < 104){                                //Arredondando valores (maior que 97 e menor que 106)  ou seja entre 98 e 105
    nivel_agua = 100;                                                     //Setando um valor só pra deixar arredondado
    lcd.print((String)"" +nivel_agua +"%");                               //IMPRIME O TEXTO e concatena com espaços e %
  }

 if(nivel_agua > 103){                                                    //Se o nivel for MAIOR que 105%
    lcd.setCursor(0, 1); 
    lcd.print((String)"MUITO CHEIA!" +nivel_agua +"%");                     //IMPRIME O TEXTO e concatena com espaços e %
 }

  
  delay(5000);
}