/*
    SimpleClock.cpp

    Shows a (fast) running clock with big numbers on a 2004 LCD.
    https://wokwi.com/projects/346661429974139474

    Copyright (C) 2022  Armin Joachimsmeyer
    [email protected]

    This file is part of LCDBigNumbers https://github.com/ArminJo/LCDBigNumbers.

    LCDBigNumbers is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program. If not, see <http://www.gnu.org/licenses/gpl.html>.

*/

#include <Wire.h>

//#include <extEEPROM.h>    //https://github.com/PaoloP74/extEEPROM
//extEEPROM myEEPROM(kbits_256, 1, 64, 0x50);

#include <Arduino.h>


#include <LiquidCrystal_I2C.h>
#define LCD_I2C_ADDRESS 0x27    // Default LCD address is 0x27 for a 20 chars and 4 line / 2004 display
#define LCD_COLUMNS 20
#define LCD_ROWS 4
LiquidCrystal_I2C lcd(LCD_I2C_ADDRESS, LCD_COLUMNS, LCD_ROWS); // LCD_COLUMNS and LCD_ROWS are set by LCDBigNumbers.hpp depending on the defined display


////#include <LiquidCrystal_I2C_Menu.h>
//LiquidCrystal_I2C_Menu lcd(0x27, 20, 2);

#include <HX711.h>

/*
  #include <LiquidCrystal.h>

  const int rs = 10, en = 16, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
  LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
*/

// the 8 arrays that form each segment of the custom numbers
byte bar1[8] =
{
  B11100,
  B11110,
  B11110,
  B11110,
  B11110,
  B11110,
  B11110,
  B11100
};
byte bar2[8] =
{
  B00111,
  B01111,
  B01111,
  B01111,
  B01111,
  B01111,
  B01111,
  B00111
};
byte bar3[8] =
{
  B11111,
  B11111,
  B00000,
  B00000,
  B00000,
  B00000,
  B11111,
  B11111
};
byte bar4[8] =
{
  B11110,
  B11100,
  B00000,
  B00000,
  B00000,
  B00000,
  B11000,
  B11100
};
byte bar5[8] =
{
  B01111,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00011,
  B00111
};
byte bar6[8] =
{
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B11111,
  B11111
};
byte bar7[8] =
{
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00111,
  B01111
};
byte bar8[8] =
{
  B11111,
  B11111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};


HX711 basculaA;

#define SCKa  A0 //const int
#define DOUTa  A1 //const int


HX711 basculaB;

#define SCKb  A2 //const int 
#define DOUTb A3  //const int 


// Parámetro para calibrar el peso y el sensor

float calibracionA = 419;//416;//   270000////  272498 // Celda Arduino 20Kg 220000 / 272498 / 229886
float calibracionB = 419;// 270000 // //
bool Intro_Calib = false;
bool Calib_A = false;
bool Calib_B = false;

float pesoKg ; //
int  pesoG = pesoKg*1000;

bool refact = false;
int pesoRef1;
int pesoRef2;
int pesoRef3;
int pesoRef4;
//float pesoG ;
bool  BigNumber;
int number;
float pesoPositivo = 0;

// Botones.
int tara = 5;
int modo  = 6 ;
int ref_Peso = 7;
int atras_salida = 8; // back_exit
//int escala  = 11 ;

//Salidas.
int ledPin =  10;
int buzzer = 9 ;
// Menu///

String pesa[] = {"A Pesar", "Menu"}; // Estado 0.
int sizepesa = sizeof(pesa) / sizeof(pesa[0]);

String menu1[] = {"Modo","Referencia Peso","Escala","Calibracion","Configuracion","Pesar"}; // Estado 1
int sizemenu = sizeof(menu1) / sizeof(menu1[0]);

String modo1[] = {"Modo 1", "Modo 2", "Modo 3", "Modo 4","Modo 5"}; // Estado 2
int sizemodo = sizeof(modo1) / sizeof(modo1[0]);

String refpeso[] = {"Ref.A1", "Ref.A2", "Ref.A3", "Ref.B1", "Ref.B2", "Ref.B3"}; // Estado 3
int sizepeso = sizeof(refpeso) / sizeof(refpeso[0]);

String escal[] = {"Dk", "Kg", "G", "Dg", "Cg", "Mg", "No decimales"}; // Estado 4
int sizeescal = sizeof(escal) / sizeof(escal[0]);

String calib[] = {"Calibar A", "Calibar B",}; // Estado 5
int sizecalib = sizeof(calib) / sizeof(calib[0]);

String conf[] = {"Por defecto", "Modificar", "Descartar", "Atras"};
int sizeconf = sizeof(conf) / sizeof(conf[0]); // Estado 6



int Tara ;
int modoCon = 1 ; // Contador para modos
float peso1 ;
float peso2 ;
int tara1 ;
int tara2 ;
int total1 ;
int total2 ;

//int Pesando = 1;
float PesoTotal ;
//bool modAct0 = false;
bool modAct1 = false;
bool modAct2 = false;
bool modAct3 = false;
bool modAct4 = false;
bool modAct5 = false;
//float pesoRef ;
//int pesoRef;
long unidMedi ;

// Para Encoder más swich

int pinA = 2; // Conectado a CLK on KY-040 // Inicial en 6//3 pinCLK
int pinB = 3; // Conectado a DT on KY-040 // inicial en 5//2 pinDT
int pinEnt = 4;  // Conectado a SW on KY-040 // Inicial en 4//4 pinSW

//Contadores para desplazarse por los menus
int Estado = 0;
int Sig_Estado = 0;

//Variables
int contador = 0;       //Esta variable en 0 se posicionara en el primer elemento del Menu principal
int A_estado_actual;
int A_ultimo_estado;
int SW_estado_actual;
int SW_ultimo_estado;
int velocidad_scroll = 300;

int Pesar = 0 ;
//bool Pesar = false;
bool Pesando = false;

int Pos = 0; // Es el que indica la posicion del encoder
int aux = 0;
int PosMax = 7;
int PosAux = 0;
//boolean aux = false;
int cursorPos = 0;
int XYPos = 0;


unsigned long time;
unsigned long t;
unsigned long tEnt;
bool C = true;
bool D = true;
bool E = false;
bool Ent = false ;  //Esta variable de retorno en false asegurando que el boton del Encoder aun no se ha oprimido

String linea1, linea2;
int seleccion = 0;
int opcion = 0;

int EncMenu = 0;  // level_menu = 0; //Iniciamos la variable en el menu principal
int nivel_menu = 0;
int SigEncMenu = 1;
int MaxPos = 7;
int MinPos = 1;

// Condicinales para botones
bool Et = false; // para tara
bool Em = false; // para modo 
  //bool  Ee = false; // para escala
bool Erf = false; // para referencia de peso
bool Eas = false; // para atras/salida
//bool Em = false; // para modo

int ContExit = 0;

// Para Encoder 2 más swich



// Para diferenciar tiempo de swich pulsado util para entrar y salir de menus.
int tiempo = 0;
int tiempo2 = 0;
int tiempo3 = 0;
int pinEntState = 0;
// Parametro desplaamiento de la coma para escala/unidades de peso.
int movi = 0;

// Para activacion al pulsar boton escala
bool Escal = true;
// Medidas de peso/ Escalas de pesado

bool Mg ;
bool Dg ;
bool Cg ;
bool G  ;
bool Kg = true;
bool Dk ;
// Contador para escalas

int  contescal = 1;
int  contescal1 = 1; // unidades
int  contescal2 = 0; // decimales

// Pesos de referncia
int a1 = 5000;
int a2 = 1000;
int a3 = 500;
int b1 = 2500;
int b2 = 1000;
int b3 = 500;

// direccionado referencia segun basculas
int RefA;
int RefB;


void setup() {

  Serial.begin(9600);

  // initialize the LED pin as an output:

  pinMode(tara, INPUT);
  pinMode(ref_Peso, INPUT);
  pinMode(modo, INPUT);
  pinMode(atras_salida, INPUT);
  //pinMode(escala, INPUT);

  pinMode(ledPin, OUTPUT);
  pinMode(buzzer, OUTPUT);


  // Encoder 1
  pinMode(pinA, INPUT); //Derecha pinCLK
  pinMode(pinB, INPUT); //Izquierda pinDT
  pinMode(pinEnt, INPUT); //Enter pinSW

  Wire.begin();

  lcd.init();


  // assignes each segment a write number
  lcd.createChar(1, bar1);
  lcd.createChar(2, bar2);
  lcd.createChar(3, bar3);
  lcd.createChar(4, bar4);
  lcd.createChar(5, bar5);
  lcd.createChar(6, bar6);
  lcd.createChar(7, bar7);
  lcd.createChar(8, bar8);

  lcd.setCursor(1, 0);
  lcd.print("Bascula de Emilio");
  lcd.setCursor(0, 1);
  lcd.print("Al estilo de Marcos");
  //delay(1000);
  //lcd.clear();


  // Iniciar sensor
  basculaA.begin(DOUTa, SCKa);

  basculaB.begin(DOUTb, SCKb);

  delay(500);

  basculaA.set_scale(calibracionA); // Establecemos la escala en canal 1
  basculaB.set_scale(calibracionB);
  // Iniciar la tara
  // No tiene que haber nada sobre el peso
  basculaA.tare();

  basculaB.tare();

  Serial.print("Estado");
  Serial.print(Estado);

  Serial.println("Pos");
  Serial.print(Pos);
  delay(500);
  lcd.clear();
  Escal = true;

  contescal = 1;

  refact = true;
  RefA = a1;
  RefB = b1;
  Pesando = true ;
 // modAct1 = true;
  //PrintPeso();
  fn_menu(XYPos, menu1, sizemenu);       //Iniciamos presentando el pesa como contador=0 mostrara el primer elemento y enviara a pesar
  A_ultimo_estado = digitalRead(pinA);   //Leemos el estado de la salida del Encoder usando el pin CLK
 // PrintPeso();
  /////
} // fin void Setup


void custom0(int col)
{ // uses segments to build the number 0
  lcd.setCursor(col, 0);
  lcd.write(2);
  lcd.write(8);
  lcd.write(1);
  lcd.setCursor(col, 1);
  lcd.write(2);
  lcd.write(6);
  lcd.write(1);
}

void custom1(int col)
{
  lcd.setCursor(col, 0);
  lcd.write(32);
  lcd.write(32);
  lcd.write(1);
  lcd.setCursor(col, 1);
  lcd.write(32);
  lcd.write(32);
  lcd.write(1);
}

void custom2(int col)
{
  lcd.setCursor(col, 0);
  lcd.write(5);
  lcd.write(3);
  lcd.write(1);
  lcd.setCursor(col, 1);
  lcd.write(2);
  lcd.write(6);
  lcd.write(6);
}

void custom3(int col)
{
  lcd.setCursor(col, 0);
  lcd.write(5);
  lcd.write(3);
  lcd.write(1);
  lcd.setCursor(col, 1);
  lcd.write(7);
  lcd.write(6);
  lcd.write(1);
}

void custom4(int col)
{
  lcd.setCursor(col, 0);
  lcd.write(2);
  lcd.write(6);
  lcd.write(1);
  lcd.setCursor(col, 1);
  lcd.write(32);
  lcd.write(32);
  lcd.write(1);
}

void custom5(int col)
{
  lcd.setCursor(col, 0);
  lcd.write(2);
  lcd.write(3);
  lcd.write(4);
  lcd.setCursor(col, 1);
  lcd.write(7);
  lcd.write(6);
  lcd.write(1);
}

void custom6(int col)
{
  lcd.setCursor(col, 0);
  lcd.write(2);
  lcd.write(3);
  lcd.write(4);
  lcd.setCursor(col, 1);
  lcd.write(2);
  lcd.write(6);
  lcd.write(1);
}

void custom7(int col)
{
  lcd.setCursor(col, 0);
  lcd.write(2);
  lcd.write(8);
  lcd.write(1);
  lcd.setCursor(col, 1);
  lcd.write(32);
  lcd.write(32);
  lcd.write(1);
}

void custom8(int col)
{
  lcd.setCursor(col, 0);
  lcd.write(2);
  lcd.write(3);
  lcd.write(1);
  lcd.setCursor(col, 1);
  lcd.write(2);
  lcd.write(6);
  lcd.write(1);
}

void custom9(int col)
{
  lcd.setCursor(col, 0);
  lcd.write(2);
  lcd.write(3);
  lcd.write(1);
  lcd.setCursor(col, 1);
  lcd.write(7);
  lcd.write(6);
  lcd.write(1);
}

//} // fin void Setup


void printNumber(int value, int col) {

  if (value == 0) {
    custom0(col);
  } if (value == 1) {
    custom1(col);
  } if (value == 2) {
    custom2(col);
  } if (value == 3) {
    custom3(col);
  } if (value == 4) {
    custom4(col);
  } if (value == 5) {
    custom5(col);
  } if (value == 6) {
    custom6(col);
  } if (value == 7) {
    custom7(col);
  } if (value == 8) {
    custom8(col);
  } if (value == 9) {
    custom9(col);
  }
}



//}// fin void Setup


void loop() {

  time = millis(); // Registra el tiempo en todo el programa


  Botons();
  Encoder();
  // Menud();
  //PrintPeso();
  //}




  //Mod();
  //Scala();
  //RefPeso();
  //Configu();  
  //Calibra();

  do {
    //exit();
    //Botons();
    SelectOption();                   //Funcion para detectar cuando se oprime el encoder.  btnpress == true

//SubMenu Pesar {"A Pesar", "Menu"}

    if (Estado == 0) {
      MaxPos = 2;
      MinPos = 0;
      //Pesando = false;
      t = time;

      if (Encomovi(sizepesa)) {
        fn_menu(XYPos, pesa, sizepesa);

      }
      
      if (time - t > 3000) {
        Pesando = true;
        Estado = 2;
        XYPos = 0;
        Serial.println("Inicio automatico");
       // modAct1 = true;
        //Estado = 2;
        // 
      }  

      if (Ent) {

        if (XYPos == 0 ) {
          Serial.println("A Pesar ");
          Estado = 2;
          //Pesando = true;
          modAct1 = true;
         // Estado = 2;
          //XYPos = 0;
        }

        if (XYPos == 1) {
          Pesando = false;
          Serial.println("Estado  ");
          Serial.print(Estado);
          Estado = 1;
         // XYPos = 0;
        }

        Ent = false;
        //
      }
    }




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

    /////////////////////////////////////////////////////////////////////////////////
//menu  {"Modo","Referencia Peso","Escala","Calibracion","Configuracion", "Pesar"}
    if (Estado == 1) {
      MaxPos = 7 ;
      MinPos = 0 ;
      if (Encomovi(sizemenu)) {
        fn_menu(XYPos, menu1, sizemenu);
      }

      if (Ent) {
        if (XYPos == 0) {
          XYPos = 0;
          fn_menu(XYPos, modo1, sizemodo);
          Estado = 2;
        }


        if (XYPos == 1) {
          XYPos = 0;
          fn_menu(XYPos, refpeso, sizepeso );
          Estado = 3;
        }


        if (XYPos == 2) {
          XYPos = 0;
          fn_menu(XYPos, escal, sizeescal);
          Estado = 4;
        }

        if (XYPos == 3) {
          XYPos = 0;
          fn_menu(XYPos, calib, sizecalib);
          Estado = 5;
        }


        if (XYPos == 4) {
          XYPos = 0;
          fn_menu(XYPos, conf, sizeconf);
          Estado = 6;
        }

        if (XYPos == 5) {
          XYPos = 0;
          fn_menu(XYPos, pesa, sizepesa);
          //Estado = 6;
          Estado = 0;
        }
        Ent = false;
      }

    }
    /////////////////////////////////////////////////////////////////////////////////////
//SubMenu Modo {"Momo 1","Modo 2","Modo 3","Modo 4","Modo 5"}
    if (Estado == 2) {
      MaxPos = 6;
      MinPos = 0;
      //modAct1 = true;
      refact = true;
     // Pesando = true;

      //Botons();
      //exit();
      /*
      if (Estado == 2 && Pesando == true && Eas == true){
        Pesando = false;
        modAct1 = false;
        modAct2 = false;
        modAct3 = false;
        modAct4 = false;
        modAct5 = false;
        //fn_menu(XYPos, modo1, sizemodo);
        //A_ultimo_estado = digitalRead(pinA);
        Estado = 1;
        //XYPos = 0;
        Serial.println("Saliendo");
      }
      */
      /*
        switch (modoCon) {
          case 1 :
         // Estado = 2;
         // XYPos = 0;
          modAct1 = true;
          modAct2 = false;
          modAct3 = false;
          modAct4 = false;
          modAct5 = false;
          Serial.println("En modo 1");  //switch (var) {case 1:
          break;

          case 2 :
          //Estado = 2;
          //XYPos = 1;
          modAct2 = true;
          modAct1 = false;
          modAct3 = false;
          modAct4 = false;
          modAct5 = false;
          Serial.println("En modo 2");
          break;

          case 3 :
          modAct3 = true;
          modAct1 = false;
          modAct2 = false;
          modAct4 = false;
          modAct5 = false;
          Serial.println("En modo 3");
          break;

          case 4 :
          modAct4 = true;
          modAct1 = false;
          modAct2 = false;
          modAct3 = false;
          modAct5 = false;
          Serial.println("En modo 4");
          break;

          case 5 :
          modAct5 = true;
          modAct1 = false;
          modAct2 = false;
          modAct3 = false;
          modAct4 = false;
          Serial.println("En modo 5");
          break;
        }
        */
      if (Encomovi(sizemodo)) {
        fn_menu(XYPos, modo1, sizemodo);
      }

      if (Ent) {
        Pesando = true;
        ////////
       if (XYPos == 0) {
          modAct1 = true;
          (modAct2,modAct3,modAct4,modAct5) = false;
          /*
          modAct2 = false; 
          modAct3 = false;
          modAct4 = false;
          modAct5 = false;
          */
          XYPos = 1;} 
        //} 
       
             do{
                //exit();
                Botons();  
                peso1 = basculaA.get_units(4), 5;

                int m, c, d, u, number;

                if (number < 40000){ //pesoG
                m = 0;
                }

                if (number >= 1000) {
                  m = (number - (number % 1000)) / 1000;
                  number = number % 1000;
                } else {
                  m = 0;
                }

                if (number > 99) {
                  c = (number - (number % 100)) / 100;
                  number = number % 100;
                } else {
                  c = 0;
                }

                if (number > 9) {
                  d = (number - (number % 10)) / 10;
                  number = number % 10;
                } else {
                  d = 0;
                }

                u = number;
                number =  (peso1*1000);
                lcd.setCursor(15, 0);
                lcd.print("M:");
                lcd.setCursor(17, 0);
                lcd.print("A");

                Serial.println("modAct1 ");
                Serial.println (peso1,3);

                printNumber(m, 0); //0
                printNumber(c, 3); //4  3
                printNumber(d, 6); //7  6
                printNumber(u, 9); //10  9
          
                if (number >= 1 or number <= 999 ) {//&& G == true) { //pesoG 

                  lcd.setCursor(12, 1);
                  lcd.print("G");
                }

                if (number >= 1000 ){ //&& Kg == true) {
                  lcd.setCursor(12, 1);
                  lcd.print("K");
                }
            

                refact = true;
                if (refact == true ){ 
                  if (number >= RefA){  
                    delay(500);            
                    lcd.clear();
                    noTone(buzzer);
                    delay(50);
                    tone(buzzer,250);
                    delay(50);
                    noTone(buzzer); 
                    delay(50);
                    tone(buzzer,450);
                    delay(50);
                    noTone(buzzer);
                    lcd.setCursor(1,0);
                    lcd.print("Peso en A OK ");
                    lcd.setCursor(1,1); 
                    lcd.print("Retire Bote ");
                    lcd.setCursor(1,2);
                    lcd.print(peso1,3);
                    delay(500);
                    lcd.clear();
                    }
                }
          
              } while (modAct1 == true); // or modoCon == 1);



        if (XYPos == 1) {
          //modAct1 = false;
          modAct2 = true ;
          (modAct1,modAct3,modAct4,modAct5) = false;
          /*
          modAct3 = false;
          modAct4 = false;
          modAct5 = false;
          */
          XYPos = 2;} 
       // } 
         /*
        if (modoCon == 1) {
          modAct2 = true;
          (modAct1,modAct3,modAct4,modAct5) = false;
          Serial.println("En modo 2");
        }  
         */
             do{
                //exit();
                Botons();
                peso2 = basculaB.get_units(4), 5;

                int m, c, d, u, number;
        
                if (number < 40000){ //pesoG
                  m = 0;
                }

                if (number >= 1000) {
                  m = (number - (number % 1000)) / 1000;
                  number = number % 1000;
                } else {
                  m = 0;
                }

                if (number > 99) {
                  c = (number - (number % 100)) / 100;
                  number = number % 100;
                } else {
                  c = 0;
                }

                if (number > 9) {
                  d = (number - (number % 10)) / 10;
                  number = number % 10;
                } else {
                  d = 0;
                }

                u = number;
                number =  (peso2*1000);
                lcd.setCursor(15, 0);
                lcd.print("M:");
                lcd.setCursor(17, 0);
                lcd.print("B");

                Serial.println("modAct2 ");
                Serial.println (peso2,3);

                printNumber(m, 0); //0
                printNumber(c, 3); //4  3
                printNumber(d, 6); //7  6
                printNumber(u, 9); //10  9
          
                if (number >= 1 or number <= 999 ) {//&& G == true) { //pesoG 

                  lcd.setCursor(12, 1);
                  lcd.print("G");
                }

                if (number >= 1000 ){ //&& Kg == true) {
                  lcd.setCursor(12, 1);
                  lcd.print("K");
                }

                refact = true;
                if (refact == true ){ 
                    if (number >= RefB){  
                    delay(500);            
                    lcd.clear();
                    noTone(buzzer);
                    delay(50);
                    tone(buzzer,250);
                    delay(50);
                    noTone(buzzer); 
                    delay(50);
                    tone(buzzer,450);
                    delay(50);
                    noTone(buzzer);
                    lcd.setCursor(1,0);
                    lcd.print("Peso en B OK ");
                    lcd.setCursor(1,1); 
                    lcd.print("Retire Bote ");
                    lcd.setCursor(1,2);
                    lcd.print(peso2,3);
                    delay(500);
                    lcd.clear();
                    }
                  }

              } while (modAct2 == true); // or modoCon == 2);   


        if (XYPos == 2) {
         // modAct1 = false;
         // modAct2 = false;
          modAct3 = true;
          (modAct1,modAct2,modAct4,modAct5) = false;
          //modAct4 = false;
         // modAct5 = false;
          XYPos = 3;}
       // }

             do{
                //exit();
                Botons(); 
                peso1 = basculaA.get_units(4), 5;
                peso2 = basculaB.get_units(4), 5;
                PesoTotal = (peso1 + peso2);

                int m, c, d, u, number;

                if (number < 40000){ //pesoG
                  m = 0;
                }

                if (number >= 1000) {
                  m = (number - (number % 1000)) / 1000;
                  number = number % 1000;
                } else {
                  m = 0;
                }

                if (number > 99) {
                  c = (number - (number % 100)) / 100;
                  number = number % 100;
                } else {
                  c = 0;
                }

                if (number > 9) {
                  d = (number - (number % 10)) / 10;
                  number = number % 10;
                } else {
                  d = 0;
                }

                u = number;
                number =  (PesoTotal*1000);
                lcd.setCursor(15, 0);
                lcd.print("M:");
                lcd.setCursor(17, 0);
                lcd.print("A+B");

                Serial.println("modAct3 ");
                Serial.println (PesoTotal,3);

                printNumber(m, 0); //0
                printNumber(c, 3); //4  3
                printNumber(d, 6); //7  6
                printNumber(u, 9); //10  9
          
                if (number >= 1 or number <= 999 ) {
                  lcd.setCursor(12,1);
                  lcd.print("G");
                }

                if (number >= 1000 ){ 
                  lcd.setCursor(12,1);
                  lcd.print("K");
                }
            
                refact = true;
                if (refact == true ){ 
                  if (number >= RefA){  
                  delay(500);            
                  lcd.clear();
                  noTone(buzzer);
                  delay(50);
                  tone(buzzer,250);
                  delay(50);
                  noTone(buzzer); 
                  delay(50);
                  tone(buzzer,450);
                  delay(50);
                  noTone(buzzer);
                  lcd.setCursor(1,0);
                  lcd.print("Peso en Bascula OK ");
                  lcd.setCursor(1,1); 
                  lcd.print("Retire Bote ");
                  lcd.setCursor(1,2);
                  lcd.print(PesoTotal,3);
                  delay(500);
                  lcd.clear();
                  }
                }
        
              } while (modAct3 == true); // or modoCon == 3);



        if (XYPos == 3) {
          lcd.clear();
          /*
          modAct1 = false;
          modAct2 = false;
          modAct3 = false; 
          */
          modAct4 = true ;
          (modAct1,modAct2,modAct3,modAct5) = false;
          //modAct5 = false; 
          XYPos = 4;}
        //}
             do{ 
               // exit();
                Botons();
                peso1 = basculaA.get_units(4), 5;
                peso2 = basculaB.get_units(4), 5;
                //PesoTotal = (peso1 + peso2);

                
                lcd.setCursor(15, 0);
                lcd.print("M:");
                lcd.setCursor(17, 0);
                lcd.print("AyB");

                lcd.setCursor(0,0);
                lcd.print(peso1,3);
                lcd.setCursor(0,1);
                lcd.print(peso2,3);



                Serial.println("modAct4 ");
                Serial.println("Peso 1 ");
                Serial.println (peso1,3);
                Serial.println("Peso 2 ");
                Serial.println (peso2,3);

                
          
                if (peso1*1000>= 1 or peso1*1000 <= 999 ) {
                  lcd.setCursor(12,0);
                  lcd.print("G");
                }

                if (peso1*1000 >= 1000 ){ 
                  lcd.setCursor(12, 0);
                  lcd.print("K");
                }

                if (peso2*1000>= 1 or peso2*1000 <= 999) { 
                  lcd.setCursor(12,1);
                  lcd.print("G");
                }

                if (peso2*1000 >= 1000){
                  lcd.setCursor(12,1);
                  lcd.print("K");
                }
            
                refact = true;
                if (refact == true ){ 
                  if (peso1*1000 >= RefA){  
                  delay(500);            
                  lcd.clear();
                  noTone(buzzer);
                  delay(50);
                  tone(buzzer,250);
                  delay(50);
                  noTone(buzzer); 
                  delay(50);
                  tone(buzzer,450);
                  delay(50);
                  noTone(buzzer);
                  lcd.setCursor(1,0);
                  lcd.print("Peso en A OK ");
                  lcd.setCursor(1,1); 
                  lcd.print("Retire Bote ");
                  lcd.setCursor(1,2);
                  lcd.print(peso1,3);
                  delay(500);
                  lcd.clear();
                  }

                  if (peso2*1000 >= RefA){  
                  delay(500);            
                  lcd.clear();
                  noTone(buzzer);
                  delay(50);
                  tone(buzzer,250);
                  delay(50);
                  noTone(buzzer); 
                  delay(50);
                  tone(buzzer,450);
                  delay(50);
                  noTone(buzzer);
                  lcd.setCursor(1,0);
                  lcd.print("Peso en B OK ");
                  lcd.setCursor(1,1); 
                  lcd.print("Retire Bote ");
                  lcd.setCursor(1,2);
                  lcd.print(peso2,3);
                  delay(500);
                  lcd.clear();
                  }
                }
        
              } while (modAct4 == true); // or modoCon == 4);

        if (XYPos == 4){
          lcd.clear();
          /*
          modAct1 = false;
          modAct2 = false;
          modAct3 = false;
          modAct4 = false;
          */
          modAct5 = true;
          (modAct1,modAct2,modAct3,modAct4) = false;
          //(modAct1,modAct2,modAct3,modAct5) = false;
          Estado = 3;}
        //}

              do{
                //exit();
                Botons(); 
                peso1 = basculaA.get_units(4), 5;
                peso2 = basculaB.get_units(4), 5;
                //PesoTotal = (peso1 + peso2);

                
                lcd.setCursor(15, 0);
                lcd.print("M:");
                lcd.setCursor(17, 0);
                lcd.print("A≠B");

                lcd.setCursor(0,0);
                lcd.print(peso1,3);
                lcd.setCursor(0,1);
                lcd.print(peso2,3);

                Serial.println("modAct5 ");
                Serial.println (peso1,3);
                Serial.println (peso2,3);

                
          
                if (peso1*1000 >= 1 or peso1*1000 <= 999 ) {
                  lcd.setCursor(12,0);
                  lcd.print("G");
                }

                if (peso1*1000 >= 1000 ){ 
                  lcd.setCursor(12,0);
                  lcd.print("K");
                }

                if (peso2*1000 >= 1 or peso2*1000 <= 999 ) {
                  lcd.setCursor(12,1);
                  lcd.print("G");
                }

                if (peso2*1000 >= 1000 ){ 
                  lcd.setCursor(12,1);
                  lcd.print("K");
                }
            
                
                refact = true;
                if (refact == true ){ 
                  if (peso1*1000 >= RefA){  
                  delay(500);            
                  lcd.clear();
                  noTone(buzzer);
                  delay(50);
                  tone(buzzer,250);
                  delay(50);
                  noTone(buzzer); 
                  delay(50);
                  tone(buzzer,450);
                  delay(50);
                  noTone(buzzer);
                  lcd.setCursor(1,0);
                  lcd.print("Peso en A OK ");
                  lcd.setCursor(1,1); 
                  lcd.print("Retire Bote ");
                  lcd.setCursor(1,2);
                  lcd.print(peso1,3);
                  delay(500);
                  lcd.clear();
                  }

                  if (peso2*1000 >= RefB){  
                  delay(500);            
                  lcd.clear();
                  noTone(buzzer);
                  delay(50);
                  tone(buzzer,250);
                  delay(50);
                  noTone(buzzer); 
                  delay(50);
                  tone(buzzer,450);
                  delay(50);
                  noTone(buzzer);
                  lcd.setCursor(1,0);
                  lcd.print("Peso en B OK ");
                  lcd.setCursor(1,1); 
                  lcd.print("Retire Bote ");
                  lcd.setCursor(1,2);
                  lcd.print(peso2,3);
                  delay(500);
                  lcd.clear();
                  }
                }
        
              } while (modAct5 == true); // or modoCon == 5);

        Ent = false;

      }

    }


//SubMenu refpeso {"Ref.A1","Ref.A2","Ref.A3","Ref.B1","Ref.B2","Ref.B3"}
    if (Estado == 3) {
      MaxPos = 5;
      MinPos = 0;


      if (Encomovi(sizepeso)) {
        fn_menu(XYPos, refpeso, sizepeso);
      }

      if (Ent) {
        //if(Estado == 3 && Ent == true){
        if (XYPos == 0) {
          // if (Ent == true){
          // pesoRef1;
          RefA = a1;
          //XYPos = 0;
          XYPos = 1;
        }


        if (XYPos == 1) {
          // if (Ent == true){
          //pesoRef2;
          RefA = a2;
          //XYPos = 1;
          XYPos = 2;
        }


        if (XYPos == 2) {
          //if (Ent == true){
          //pesoRef3;
          RefA = a3;
          //XYPos = 1;
          XYPos = 3;
        }


        if (XYPos == 3) {
          // if (Ent == true){
          //pesoRef4;
          RefB = b1;
          //XYPos = 1;
          XYPos = 4;
        }

        if (XYPos == 4) {
          //if (Ent == true){
          //pesoRef5;
          RefB = b2;
          //XYPos = 1;
          XYPos = 5;
        }


        if (XYPos == 5) {
          // if (Ent == true){
          //pesoRef6;
          RefB = b3;
          //XYPos = 1;
          Estado = 0;
        }

        Ent = false;
      }

    }


//SubMenu escal {"Dk","Kg","G","Dg","Cg","Mg","No decimales"}
    if (Estado == 4) {
      MaxPos = 6;
      MinPos = 0;

      if (Encomovi(sizeescal)) {
        fn_menu(XYPos, escal, sizeescal);
      }

      if (Ent) {


        //if(Estado == 4 && Ent == true){
        if (XYPos == 0) {
          //if (Ent == true){
          Dk = true;
          //(Kg,G,Dg,Cg,Mg) == false;
          // XYPos = 0;
          contescal1 = 1;
          Escal = true,
          XYPos = 1;
          //}
          if ( Dk == true) {
            // (Kg,G,Dg,Cg,Mg) == false;
            (Kg, G) = false;
          }

        }


        if (XYPos == 1) {
          //if (Ent == true){
          Kg = true;
          //XYPos = 1;
          contescal1 = 2;
          //Escal = true,
          XYPos = 2;
          //}
          if (Kg == true) {
            //(Dk,G,Dg,Cg,Mg) == false;
            (Dk, G) = false;
          }
        }


        if (XYPos == 2) {
          //if (Ent == true){
          G = true;
          //XYPos = 1;
          contescal1 = 3;
          //Escal = true,
          XYPos = 3;
          // }
          if (G == true) {
            //(Dk,Kg,Dg,Cg,Mg) == false;
            (Dk, Kg) = false;
          }
        }


        if (XYPos == 3) {
          // if (Ent == true){
          Dg = true;
          //XYPos = 1;
          contescal2 = 1;
          //Escal = true,
          XYPos = 4;
          //}
          if (Dg == true) {
            //(Dk,Kg,G,Cg,Mg) == false;
            (Cg, Mg) = false;
          }
        }


        if (XYPos == 4) {
          //if (Ent == true){
          Cg = true;
          //XYPos = 1;
          contescal2 = 2;
          //Escal = true,
          XYPos = 5;
          //}
          if (Cg == true) {
            //(Dk,Kg,G,Dg,Mg) == false;
            (Dg, Mg) = false;
          }
        }


        if (XYPos == 5) {
          // if (Ent == true){
          Mg = true;
          //XYPos = 1;
          contescal2 = 3;
          //Escal = true,
          XYPos = 6;
          //}
          if (Mg == true) {
            //(Dk,Kg,G,Dg,Mg) == false;
            (Dg, Cg) = false;
          }
        }


        if (XYPos == 6) {
          //(Dk,Kg,G,Dg,Cg) == false;
          (Dg, Cg, Mg) = false;
          contescal2 = 0;
          //Escal = true,
          Estado = 0;
        }

        Ent = false;
      }
      // if(Estado == 4 && Ent == false){
      // }
    }

//SubMenu calib {"Calibar A","Calibar B","Descartar","Atras"}
    if (Estado == 5 ) {
      MaxPos = 3;
      MinPos = 0;


      if (Encomovi(sizecalib)) {
        fn_menu(XYPos, calib, sizecalib);
      }

      if (Ent) {

        // if(Estado == 6 && Ent == true){
        if (XYPos == 0) {
          //if (Ent == true){
          Calib_A = true;
          //calibA();
          //XYPos = 0;
          XYPos = 1;
        }


        if (XYPos == 1) {
          // if (Ent == true){
          Calib_B = true;
          //calibB();
          //XYPos = 1;
          XYPos = 2;
        }


        if (XYPos == 2) {
          // descarta();
          //if (Ent == true){
          Serial.println("Descarta");
          //XYPos = 1;
          XYPos = 3;
        }


        if (XYPos == 3) {
          //atras();
          //if (Ent == true){
          Serial.println("Atras");
          Estado = 0;
          //XYPos = 1;
        }


        Ent = false;

      }
    }

//SubMenu pesa  {"A Pesar","Menu"}
    if (Estado == 6) {
      MaxPos = 1 ;
      MinPos = 0;
      t = time;

      if (time - t >3000){
        //Pesando = true;
        Estado = 2;
        Pesando = true;
        XYPos = 0;
        modAct1 = true;
      }

      if (Encomovi(sizepesa)) {
        fn_menu(XYPos, pesa, sizepesa);
      }

      if (Ent) {

        //if(Estado == 5 && Ent == true){
        if (XYPos == 0) {
          // defol;
          //if (Ent == true){
          Serial.println("A Pesar");
          //Pesando = true;
          Estado = 2;
          //XYPos = 1;
          Pesando = true;
          modAct1 = true;
          XYPos = 0;
        }


        if (XYPos == 1) {
          //mod;
          //if (Ent == true){
          Serial.println("Menu");
          //XYPos = 1;
          Estado = 1;
          Pesando = false;
          modAct1 = false;
          XYPos = 0;
        }

        Ent = false;

      }

    }
  
  }  while (Pesando == false); // Fin estado 6
  
  //Botons();
} // Fin de void loop
//}// Fin do
//} //Fin if  (Ent == true)
//}//


void Configu() {

}
/////////

/////////

/*

     int menu;
     String arrayMenu[] = {"A","B","A+B","A y B"};
     int size = sizeof(arrayMenu) / sizeof(arrayMenu[0]);
     Encoder();

     if(menu == -1)Sig_Estado = 1;
     else if(menu == 1)Sig_Estado = 31;
     else if(menu == 2)Sig_Estado = 32;
     else if(menu == 3)Sig_Estado = 33;
     else if(menu == 4)Sig_Estado = 34;
     //Sig_Estado = 4;

*/
//}////Fin void Menud)
//////////////// 

// Código del encoder Nº1

//---------------------------------------------------------------


// Rutina para auto escape si no pulsamos enter o no hay cambio del encoder pasados 30 segundos.

/////////
void Mod() {

}
/////////

void PrintPeso(){
 // Pesando = true;
 // modAct1 = true;
 // BigNumber = true ; 
//  while  ( Pesando == true) {
    //lcd.setCursor(15, 0);
   // lcd.print("M:");
    //Botons();
  /*  
      if (Ent ) {
        if(Pesando==true){
          Pesando = false;
         
          }
         Ent = false;
        }
         



    //Pesando = false;
    //}
    
    if (modAct0 == true ){
        Pesando = false;
        Estado = 1;
      } 

 
    if ((Pesando == true) &&((!Ent) or (!Botons) or (!Encoder))) {
      Pesando = false;
      //fn_menu(XYPos,menu1,sizemenu); //Iniciamos presentando el menu principal como contador=0 mostrara el primer elemento del Menu
      Estado = 0;
    } 

    //float peso;
    //int pesoG = (pesoKg*1000);
    //int gramos= grados*100.0; // centGrados=2756


    peso1 = basculaA.get_units(5), 5;
    peso2 = basculaB.get_units(5), 5;
    PesoTotal = (peso1 + peso2);
   // modAct1 = true;

    //if (modAct1 == true or  modAct2 == true or modAct3 == true) {
       //BigNumber = true; 
      //if (modAct1 == true){
        
     // } 
     if (BigNumber == true){
          
          int m, c, d, u, number;
          //number = 
      
          //pesoG =  (peso1 or peso2 or PesoTotal);
          //number = pesoG*1000;


          if (number < 40000){ //pesoG
            m = 0;
          }

          if (number >= 1000) {
            m = (number - (number % 1000)) / 1000;
            number = number % 1000;
          } else {
            m = 0;
          }

          if (number > 99) {
            c = (number - (number % 100)) / 100;
            number = number % 100;
          } else {
            c = 0;
          }

          if (number > 9) {
            d = (number - (number % 10)) / 10;
            number = number % 10;
          } else {
            d = 0;
          }

          u = number;
         // number = peso1*1000;

          printNumber(m, 0); //0
          printNumber(c, 3); //4  3
          printNumber(d, 6); //7  6
          printNumber(u, 9); //10  9
    
          if (number >= 1 or number <= 999 ) {//&& G == true) { //pesoG 

            lcd.setCursor(12, 1);
            lcd.print("G");
          }

          if (number >= 1000 ){ //&& Kg == true) {

            lcd.setCursor(12, 1);
            lcd.print("K");
          }
      
        
          if   (modAct1 == true) {
            number =  (peso1*1000);
            lcd.setCursor(15, 0);
            lcd.print("M:");
            lcd.setCursor(17, 0);
            lcd.print("A");
           // number = peso1*1000;
            Serial.println("modAct1 ");
              //  delayMicroseconds(10);
            Serial.println (peso1,3);
            //printNumber(m,0);
            //printNumber(c,3);
            //printNumber(d,6);
           // printNumber(u,9);
          } 

          if (modAct2 == true) {
          // number =  peso2;
            lcd.setCursor(15, 0);
            lcd.print("M:");
            lcd.setCursor(17, 0);
            lcd.print("B");
            number = peso2*1000 ;
            Serial.println(peso2,3);
          }

          if (modAct3 == true) {
            //number =  PesoTotal;
            lcd.setCursor(15, 0);
            lcd.print("M:");
            lcd.setCursor(17, 0);
            lcd.print("A+B");
            number = PesoTotal*1000 ; 
            Serial.println(PesoTotal,3);
          }
      //}    
     // printNumber(m,0);
      // printNumber(c,3);
      //printNumber(d,6);
      //printNumber(u,9);
   } 

   // BigNumber = false;
    

    if (modAct4 == true) {
      BigNumber = false; 
      lcd.setCursor(0, 0);
      lcd.print(peso1,3);
      lcd.setCursor(0, 1);
      lcd.print(peso2,3);
      lcd.setCursor(15, 0);
      lcd.print("M:");
      lcd.setCursor(17, 0);
      lcd.print("AyB");
      Serial.println(peso1 );
      Serial.println (peso2 );
    }

    if (modAct5 == true) {
      BigNumber = true; 
      lcd.setCursor(0, 0);
      lcd.print(peso1,3);
      lcd.setCursor(0, 1);
      lcd.print(peso2,3);
      lcd.setCursor(15, 0);
      lcd.print("M:");
      lcd.setCursor(17, 0);
      lcd.print("A≠B");
    }

     if (refact == true) {
      lcd.setCursor(14, 1);
      lcd.print("R:");


      if (RefA == a1) {
        lcd.setCursor(16, 1);
        lcd.print("a1");
      }
      if (RefA == a2 ) {
        lcd.setCursor(16, 1);
        lcd.print("a2");
      }
      if (RefA == a3 ) {
        lcd.setCursor(16, 1);
        lcd.print("a3");
      }
      if (RefB == b1 ) {
        lcd.setCursor(18, 1);
        lcd.print("b1");
      }
      if (RefB == b2) {
        lcd.setCursor(18, 1);
        lcd.print("b2");
      }
      if (RefB == b3) {
        lcd.setCursor(18, 1);
        lcd.print("b3");
      }
    }

    if ( refact == false) {
      lcd.setCursor(15, 1);
      lcd.print("    ");
    }

*

 // } //Final de while o if (Pesando == true)

}


/////////
void RefPeso() {

  /////////Insertar valor ref
  //int change_mass(int value, int unit, bool op)
  //     int pesoRef (int value, int unit, bool op)
  /* {
      if(op){
        value += 1;
      else

        value -= 1;

      value = (value + 10) % 10;

      switch(unit)
      {
        case -1:
          lcd.setCursor(11, 1);
          break;

        case 0:
          lcd.setCursor(9, 1);
          break;

        case 1:
          lcd.setCursor(8, 1);
          break;
      }

      lcd.print(value);
      return value;
    } */
  ////////Fin Insertar valor ref

}

/////////
void Scala() {

}

////A
//Select


void SelectOption() {


  if (E == false) {
    if (digitalRead(pinEnt) == LOW) {
      //Serial.println("Enter");
      //Ent = false ;
      E = true;
    }
  }

  if (E == true) {

    if (digitalRead(pinEnt) == HIGH) {
      // Serial.println("Enter");
      E = false;
      //Ent =! Ent;
      Ent = true;
        Serial.println("Ent  ");
        Serial.print(Ent);
      // Serial.println(Pos);

      //Ent = true;
    }
  }
} // Fin void select
/////
////A

////B
void fn_menu(byte XYPos, String menu1[], int sizemenu) {
  lcd.clear();
  linea1 = "";
  linea2 = "";

  // if((pos % 2) == 0){
  //if(XYPos == 0){
  if ((XYPos % 2) == 0) {
    lcd.setCursor(0, 0);
    lcd.print("->");
    linea1 = menu1[XYPos];

    //if(pos+1 != sizemenu){
    if (XYPos + 1 != sizemenu) {
      linea2 = menu1[XYPos + 1];

    }

  } else {
    linea1 = menu1[XYPos - 1];
    lcd.setCursor(0, 1);
    lcd.print("->");
    linea2 = menu1[XYPos];
  }

  lcd.setCursor(2, 0);
  lcd.print(linea1);

  lcd.setCursor(2, 1);
  lcd.print(linea2);

}

////B

////C
//bool  Encoder(byte sizemenu1){
void Encoder(){
  // Código del encoder Nº1
  //Pos = 0;
  if (digitalRead(pinA) == 0) {
    t = time;
    if (C == true) {
      Pos ++;  // pos = pos + 1
      if (Pos > MaxPos) {
        Pos--; //Evito conflicto con Encoder
      }
      // XYPos ++ ;
      //Serial.println("Encoder Position: ");
      //Serial.println("XPPos");
      //Serial.print(XYPos);
      // Serial.println("Pos");
      // Serial.print(Pos);
      C = false;
      D = false;
    }
  }

  if (digitalRead(pinB) == 0) {
    t = time;
    if (D == true) {
      Pos --; // pos = pos - 1
      if (Pos < MinPos) {
        Pos ++; // Evito conflicto con Encoder
      }
      // XYPos --;

      //Serial.println("Encoder Position"
      //Serial.println("XPPos");
      //Serial.print(XYPos);
      //Serial.println("Pos");
      // Serial.print(Pos);

      D = false;
      C = false; //Bloquea la lectura del A porque el B llego primero
      // y sino se entra y pasa a la posicon antrior
    }
  }

  if (time - t > 20) { //Tengo que esperar 8ms esta bien lo puedes subir a 10 si va rápido  100 ms para registar nuevamente
    C = true;
    D = true;
  }
} // Fin void Encoder
//////C

//////D
bool Encomovi(byte sizemenu) {


  bool retorno = false;

  A_estado_actual = digitalRead(pinA);

  if (A_estado_actual != A_ultimo_estado) {

    if (digitalRead(pinB) != A_estado_actual) {       //DT != CLK
      XYPos ++;
      //Serial.println(XYPos);
      delay(250);
    }
    else {
      XYPos --;
      //Serial.println(XYPos);
      delay(250);
    }

    if (XYPos <= 0) {
      XYPos = 0;
    }

    if (XYPos >= sizemenu - 1 ) {
      XYPos = sizemenu - 1;
    }
    retorno = true;
  }
  return retorno;
}// Fin Encomovi



//////D
void  Botons(){ 
//boton tara
  if (Et == false) {
    if (digitalRead(tara) == LOW) {
      //Serial.println("Enter");
      digitalWrite(ledPin, LOW);
      Et = true;
    }
  }

  if (Et == true) {

    if (digitalRead(tara) == HIGH) {

      lcd.clear();
      lcd.setCursor(1, 0);
      lcd.print("Basculas puestas a ");
      lcd.setCursor(7, 1);
      lcd.print("0.0 KG");
      digitalWrite(ledPin, HIGH);

      basculaA.tare();
      basculaB.tare();
      //delay(500);
      digitalWrite(ledPin, LOW);
      delay(500);
      lcd.clear();
      //Estado = 0 ;
      
      Pesando = true;
      //PrintPeso();
      //Pesando = true;
      modAct1 = true;
      Et = false;
    }
  }

//boton modo 
  if (Em  == false) {
    if (digitalRead(modo) == LOW) {
      //Serial.println("Enter");
      digitalWrite(ledPin, LOW);
      Em = true;
    }
  }

  if (Em == true) {

    if (digitalRead(modo) == HIGH) {
      lcd.clear();
      //lcd.setCursor(1, 0);
      //lcd.println("Modo ");
      //lcd.setCursor(7, 1);
      //lcd.print(modoCon);
      //Serial.print("modoCon ");
      //Serial.print(modoCon);
      digitalWrite(ledPin, HIGH);

      delay(500);
      digitalWrite(ledPin, LOW);
      //delay(500);
      //Estado = 1;
      // Pesando = true;
      //PrintPeso();
      modoCon  ++;
      if (modoCon <= 1) {
        modoCon = 1;
        //Escal = true;
      }
      //if (ModoCon = 1) {
      //  Pesando=true;
     // }
      if (modoCon > 5 ) {
        // Escal = false;
        modoCon= 1;
      } 
        
       Pesando = true;
       
       switch (modoCon) {
          case 1 :
         // Estado = 2;
         // XYPos = 0;
          modAct1 = true;
          modAct2 = false;
          modAct3 = false;
          modAct4 = false;
          modAct5 = false;
          Serial.println("En modo 1");  //switch (var) {case 1:
          break;

          case 2 :
          //Estado = 2;
          //XYPos = 1;
          modAct1 = false;
          modAct2 = true;
          modAct3 = false;
          modAct4 = false;
          modAct5 = false;
          Serial.println("En modo 2");
          break;

          case 3 :
         
          modAct1 = false;
          modAct2 = false;
          modAct3 = true;
          modAct4 = false;
          modAct5 = false;
          Serial.println("En modo 3");
          break;

          case 4 :
          modAct1 = false;
          modAct2 = false;
          modAct3 = false;
          modAct4 = true;
          modAct5 = false;
          Serial.println("En modo 4");
          break;

          case 5 :
          modAct1 = false;
          modAct2 = false;
          modAct3 = false;
          modAct4 = false;
          modAct5 = true;
          Serial.println("En modo 5");
          break;
        }
      
      lcd.setCursor(1,0);
      lcd.print("Modo ");
      lcd.setCursor(6,0);
      lcd.print(modoCon);
      Serial.println("Modo ");
      Serial.println(modoCon);
      lcd.clear();

      Em = false;
    }
  }

//boton referencia de peso
  if (Erf == false) {
    if (digitalRead(ref_Peso) == LOW) {
      //Serial.println("Enter");
     // digitalWrite(ledPin, LOW);
      Erf = true;
    }
  }

  if (Erf == true) {

    if (digitalRead(ref_Peso) == HIGH) {

      lcd.clear();
      lcd.setCursor(1, 0);
      lcd.print("Ref. Peso ");
      lcd.setCursor(7, 1);
      lcd.print(RefA, RefB);
      digitalWrite(ledPin, HIGH);
      //!refact ;
      refact = !refact ;

      delay(500);
      digitalWrite(ledPin, LOW);
      //delay(500);
      lcd.clear();
      Pesando = true;
      //PrintPeso();
      Erf = false;
    }
  }
//  } // Fin void Botons primer modo 

//boton atras/salida
// void exit(){
  if (Eas  == false) {
    if (digitalRead(atras_salida) == LOW) {
      //Serial.println("Enter");
    //  digitalWrite(ledPin, LOW);
      Eas = true;
    }
  }

  if (Eas == true) {

    if (digitalRead(atras_salida) == HIGH) {

      lcd.clear();
      lcd.setCursor(1, 0);
      lcd.print("Atras/Salir ");
      lcd.setCursor(7, 1);
      lcd.print(" < ");
      digitalWrite(ledPin, HIGH);
      delay(500);
      Pesando = false;
      refact = false;
      modAct1 = false;
      modAct2 = false;
      modAct3 = false;
      modAct4 = false;
      modAct5 = false; 
      delay(50);
      //fn_menu(XYPos,menu1,sizemenu);
     // A_ultimo_estado = digitalRead(pinA);
      
      Estado = 1;
      //XYPos = 0;
      
      //Ent = true;
      /*
      delay(100);
      //XYPos = 0;
      Ent = false;
      delay(100);
      */

      digitalWrite(ledPin, LOW);
      //delay(500);
     /*
      Serial.print("XYPos");
      Serial.println(XYPos);
      Serial.print("Estado");
      Serial.println(Estado);
      */

      lcd.clear();

      Eas = false;
     }
    Estado = 1;
  }    
  
 //} // Fin void exit 
 //if (time - t > 20) {
} //Fin void Botons segundo modo 
/////////
//---------------------------------------------------------------
/*
if (Eas){
  if (XYPos == 0){
    XYPoss = 0;
    fn_menu(XYPos, menu1, sizemenu);
    Estado = 1;
  }
  Eas = false;
}
*/
$abcdeabcde151015202530354045505560fghijfghij