Menú con pantalla LCD 20X4

Hola! Soy nueva usando Arduino y estoy haciendo un proyecto de un temporizador que al presionar el botón de inicio encienda uno de los 4 relés de un módulo de relés y para esto quiero hacer un menú que salga en la pantalla y me permita seleccionar el relé que quiero que encienda.

El código del temporizador ya lo tengo y funciona muy bien solo que ahora quisiera saber como ponerle un menú para la selección de los relés antes de seleccionar el tiempo del temporizador.

#include <LiquidCrystal.h> //Libreria del display LCD
#define ON LOW
#define OFF HIGH
#define TONO_ERROR 700
#define TIME_INTERVAL 10000

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Inicializamos la libreria con el numero de los pines a utilizar

int buzzer = 10;           //Alarma
int rele = 24;             //Relé
int ahoras = 0;            //Variable a mostrar por LCD de las horas
int aminutos = 0;          //Variable a mostrar por LCD de los minutos
int asegundos = 0;         //Variable a mostrar por LCD de los segundos
int segundostotal = 0;     //Tiempo total
int msg= 0;                //Barrera para el mensaje de bienvenida

int start = 6;            //Pulsador de arranque
int empieza = 1024;        // Variable para almacenaje del pulsador de arranque

int buth = 7;             //Pulsador de Horas
int butm = 8;             //Pulsador de Minutos
int buts = 9;             //Pulsador de segundos

int varbuth = 0;           //Variable para almacenar el valor del pulsador de horas
int varbutm = 0;           //Variable para almacenar el valor del pulsador de minutos
int varbuts = 0;           //Variable para almacenar el valor del pulsador de segundos

void setup() 
{
  digitalWrite (rele, OFF);
   lcd.begin(20, 4);         // Configuramos el numero de columnas y filas del LCD.  
      pinMode(buzzer, OUTPUT);  //Pin de alarma --> Salida
      pinMode(rele, OUTPUT);    //Pin de relevador --> Salida
   pinMode(buth, INPUT_PULLUP);     //Pin de pulsador de horas --> Entrada
   pinMode(butm, INPUT_PULLUP);     //Pin de pulsador de minutos --> Entrada
   pinMode(buts, INPUT_PULLUP);     //Pin de pulsador de segundos --> Entrada
   pinMode(start, INPUT_PULLUP);    //Pin de pulsador de arranque --> Entrada
   
   
   msg = 0;                  //Barrera del mensaje de bienvenida
   empieza = 1024;           //Barrera de arranque
   
   varbuth = 1;              //Barrera de horas
   varbutm = 1;              //Barrera de minutos
   varbuts = 1;              //Barrera de segundos
}

void loop() 
{
  digitalWrite (rele, OFF);
     if(msg==0)             //Mostramos el mensaje de bienvenida solo una vez
     {
      digitalWrite(buzzer,HIGH);
      delay(500);
      digitalWrite(buzzer,LOW);
      delay(500);
       lcd.setCursor(3,0);
       lcd.print("Temporizador");
       lcd.setCursor(4,1);
       lcd.print("Electroiman");
       lcd.setCursor(7,2);
       lcd.print("UPIIG");
       delay(3000); 
       msg = 1;
       lcd.clear();
     }

     
     //-------------------------------------------------------------------------------------------------     
     // LECTURA DE LOS BOTONES Y ELECCIÓN DEL TIEMPO, NO SALE DEL BUCLE HASTA PULSAR 
     // EL BOTON DE ARRANQUE
     //-------------------------------------------------------------------------------------------------
     
     do                   
     {
       
       varbuth = digitalRead(buth);   //Leemos boton de horas
       varbutm = digitalRead(butm);   //Leemos boton de minutos
       varbuts = digitalRead(buts);   //Leemos boton de segundos
       
       if( ! varbuth == 0)              //Si el boton ha sido pulsado, aumentamos las horas en una unidad
       {
        ahoras = ahoras + 1 ;
        delay(250);
       }  
       
        if( ! varbutm == 0)            //Si el boton ha sido pulsado, aumentamos los minutos en una unidad
       {
         aminutos = aminutos + 1;
         delay(250);
       }  
       
        if( ! varbuts == 0)            //Si el boton ha sido pulsado, aumentamos los segundos en una unidad
       {
         asegundos = asegundos + 1; 
         delay(250);
       }  
             
       lcd.setCursor(0,0);
       lcd.print("Elige el tiempo");  //Muestra mensaje y las HH:MM:SS que vayamos aumentando
       
       lcd.setCursor(4,1);     

      if (ahoras < 10) lcd.print("0");    // Si las horas son menor que 10, pone un "0" delante.
       lcd.print(ahoras);                 // Sin este codigo, se muestra asi: H:M:S  (1:M:S)
       lcd.print(":");

      if (aminutos < 10) lcd.print("0");  // Si los minutos son menor que 10, pone un "0" delante.
       lcd.print(aminutos);               // Sin este codigo, se muestra asi: H:M:S  (H:1:S)

       lcd.print(":");
      if (asegundos < 10) lcd.print("0"); // Si los segundos son menor que 10, pone un "0" delante.
       lcd.print(asegundos);              // Sin este codigo, se muestra asi: H:M:S  (H:M:1)
       
       empieza = digitalRead(start);   //Lee el boton de arranque
       
       if ( ! empieza == 0)              //Si el boton de arranque, fue pulsado...
       {
        segundostotal = asegundos + (aminutos * 60) + (ahoras * 60 * 60);  //Convierte el tiempo elegido en segundos!!
       }
             
     } while(empieza != 0);  // Se repite el menu de elegir tiempo hasta que pulsemos el boton de arranque.

      digitalWrite (rele, ON);
       
      //-------------------------------------------------------------------------------------------------
      // UNA VEZ PULSADO EL BOTON DE ARRANQUE Y ACUMULADO EL TIEMPO, ENTRA EN EL SIGUIENTE WHILE
      // Y NO FINALIZA HASTA TERMINAR LA CUENTA.
      //-------------------------------------------------------------------------------------------------

    

      while (segundostotal > 0) 
      {
        delay (1000);          //Descontamos en periodos de 1 segundo
        segundostotal--;     
   
        ahoras = ((segundostotal / 60)/ 60);   //Convertimos los segundos totales en horas
        aminutos = (segundostotal / 60) % 60;  //Convertimos los segundos totales en minutos
        asegundos = segundostotal % 60;        //Convertimos los segundos totales en periodos de 60 segundos

        lcd.setCursor(0,0);
        lcd.print("Tiempo restante");        //Mostramos mensaje de tiempo restante
  
        lcd.setCursor(4,1);
        if (ahoras < 10) lcd.print("0");     // Si las horas son menor que 10, pone un "0" delante.
        lcd.print(ahoras);                   // Sin este codigo, se muestra asi: H:M:S  (1:M:S)
        lcd.print(":");

        if (aminutos < 10) lcd.print("0");   // Si los minutos son menor que 10, pone un "0" delante.
        lcd.print(aminutos);                 // Sin este codigo, se muestra asi: H:M:S  (H:1:S)

        lcd.print(":");
        if (asegundos < 10) lcd.print("0");  // si el valor de segundo esta por debajo de 9 (unidad) antepone un cero
        lcd.print(asegundos);                // Sin este codigo, se muestra asi: H:M:S  (H:M:1)
        
          if (segundostotal == 0)            //Si finaliza el tiempo
          {           
             while(1)                        //Bucle infinito mostrando mensaje y haciendo parpadear un led
             {               
                  lcd.clear();
                  lcd.setCursor(5,0);
                  lcd.print("Tiempo");
                  lcd.setCursor(3,1);
                  lcd.print("Finalizado");

        digitalWrite (rele, OFF);
                  sonarTono(TONO_ERROR,TIME_INTERVAL);

                 exit(0);

             }     

          }

     }

     

}


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

    // SONAR TONO

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

    void sonarTono(int tono, int duracion)

    {

      tone(buzzer,tono,duracion);

      delay(duracion);

    }

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.