#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 20, 4);

#define pin_btnBLUE   34
#define pin_btnYELLOW 35
#define pin_btnGREEN  32

#define PIN_TRIG 33
#define PIN_ECHO 25

enum{
  MENUPPL,
  MENU_LLENADO,
  MENU_USUARIO
};

int opCurrentMenu=MENUPPL, opSel=1;
int lvl;

void menuPPAL();
void menuLLENADO();
void menuUSUARIO();

int getLvl();

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Hello, ESP32!");

  //Configuracion de los BTN
  pinMode(pin_btnBLUE, INPUT);
  pinMode(pin_btnYELLOW, INPUT);
  pinMode(pin_btnGREEN, INPUT);

  //CONFIGURAMOS LA LCD
  LCD.init(); 
  LCD.setBacklight(HIGH); 
  LCD.clear();

  //CONFIGURAMOS SENSOR ULTRASONIDO
  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);

}

void loop() {
  
  if( opCurrentMenu == MENUPPL ){
     menuPPAL();
  }
  else if( opCurrentMenu == MENU_LLENADO ){
    menuLLENADO();
  }
  else if( opCurrentMenu == MENU_USUARIO ){
    menuUSUARIO();
  }

  lvl = getLvl();
  Serial.print("lvl: ");
  Serial.print(lvl);
  Serial.println(" cm");

  delay(100); // this speeds up the simulation
}




// Aqui programamos las funciones del menu de usuario
void menuPPAL(){
    LCD.setCursor(0,0); LCD.print("     MENU PPAL      ");
    LCD.setCursor(0,1); LCD.print("1.MENU USUARIO      ");
    LCD.setCursor(0,2); LCD.print("2.MENU LLENADO      ");
    LCD.setCursor(0,3); LCD.print("OP:                 ");
    LCD.setCursor(3,3); LCD.print(opSel);

    if( digitalRead(pin_btnBLUE) == 1){
       
       while(digitalRead(pin_btnBLUE) == 1);
       opSel++;
       if(opSel > 2){
         opSel=1;
       }
    }
    if( digitalRead(pin_btnYELLOW) == 1){
       
       while(digitalRead(pin_btnYELLOW) == 1);
       opSel--;
       if(opSel < 1  ){
         opSel=2;
       }
    }

    if(opSel == 1){
      LCD.setCursor(15,1);LCD.print("<");
      LCD.setCursor(15,2);LCD.print(" ");
    }
    if(opSel == 2){
      LCD.setCursor(15,1);LCD.print(" ");
      LCD.setCursor(15,2);LCD.print("<");
    }

    if( digitalRead(pin_btnGREEN) == 1){
       
       while(digitalRead(pin_btnGREEN) == 1);
       if(opSel == 1){
         opCurrentMenu = MENU_USUARIO;
         opSel=1;
       }
       else{
         opCurrentMenu = MENU_LLENADO;
         opSel=1;
       }
       LCD.clear();
    }
    


}
void menuLLENADO(){
    LCD.setCursor(4,0);
    LCD.print("MENU LLENADO");
}
void menuUSUARIO(){
    LCD.setCursor(4,0);
    LCD.print("MENU USUARIO");
}

//Metodo para programar el sensor HC-SR04
int getLvl(){
// Start a new measurement:
  digitalWrite(PIN_TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG, LOW);

  // Read the result:
  int duration = pulseIn(PIN_ECHO, HIGH);
  

  return duration/48;
}
$abcdeabcde151015202530354045505560fghijfghij