Contenido del curso

Actividad 25

 

Ejercicio LCD

En este ejercicio se utilizará la pantalla LCD para hacer un menú muy simple y poder probar varias de las funciones que hay para programar las pantallas LCD. Se van a utilizar 3 pulsadores. El primero de ellos se va a utilizar para subir en el menú. El segundo pulsador se va a utilizar para bajar en el menú y el tercero para seleccionar una opción. A modo de ejemplo, se pueden considerar 4 posibles selecciones:

  • Mostrar hora

  • Mostrar nombre

  • Mostrar fecha

  • Mostrar numero favorito

Cada una de estas selecciones tiene que tener un valor ya predefinido en la programación.

El esquema de montaje se puede ver a continuación:

    Nota importante

La programación de la pantalla LCD por I2C requiere de una librería específica para su uso. Puedes utilizar LiquidCrystal I2C de Frank de Brabander y la librería Wire que viene por defecto instalada en el Arduino IDE.



// Se definen los pines de los pulsadores
#define subir 2
#define seleccionar 3
#define bajar 4

// Se incluyen las librerias necesarias
#include  <Wire.h>  //Comunicacion con modulo I2C
#include  <LiquidCrystal_I2C.h> //Pantalla LCD

// Se crea el objeto de la pantalla LCD
LiquidCrystal_I2C lcd(0x27, 16,2);

// Se definen las respuestas de los diferentes apartados
String hora = "12:24:56";
String nombre = "Pepe";
String fecha = "12/04/23";
String num_fav = "73";

// Se crean las variables necesarias para operar el menú
int seleccion = 3;
int evento = 0;

void setup() {
  // Se configuran los pines digitales
  pinMode(subir,INPUT);
  pinMode(seleccionar,INPUT);
  pinMode(bajar,INPUT);
  // Se inicializa la pantalla
  lcd.init();
  lcd.backlight();
  lcd.clear();
  // Se imprime en la pantalla el menu
  lcd.print(" > Hora");
  lcd.setCursor(0,1);
  lcd.print("   Nombre");
}

void loop() {
  // si se pulsa el boton de subir en el menu
  if(digitalRead(subir)==HIGH){
    while(digitalRead(subir)==HIGH){}   // Parar ejecucion hasta soltar
    seleccion++;                        // Incrementar cuenta
    evento = 1;                         // Actualizar LCD
    if(seleccion>=4){                   // Si el contador se pasa
      seleccion = 3;                    // Fijar a 3
    }
  }
  // Si se pulsa el boton para bajar en el menu
  if(digitalRead(bajar)==HIGH){
    while(digitalRead(bajar)==HIGH){}   // Parar ejecucion hasta soltar
    seleccion--;                        // Disminuir la cuenta
    evento = 1;                         // Actualizar LCD
    if(seleccion<=-1){                  // Si contador cae por debajo de 0
      seleccion=0;                      // Fijar a 0
    }
  }
  // Si se pulsa el boton de seleccion
  if(digitalRead(seleccionar)==HIGH){
    while(digitalRead(seleccionar)==HIGH){} // Parar ejecución hasta soltar
    evento = 2;                             // Entrar en la seleccion
  }
  if (evento == 1){                // Actualizar menu LCD
    switch(seleccion){
      case 3:
        // Imprimir menu en LCD
        lcd.clear();
        lcd.print(" > Hora");
        lcd.setCursor(0,1);
        lcd.print("   Nombre");
        evento = 0;               // Dejar de actualizar LCD
        break;
      case 2:
        // Imprimir menu en LCD
        lcd.clear();
        lcd.print("   Hora");
        lcd.setCursor(0,1);
        lcd.print(" > Nombre");
        evento = 0;               // Dejar de actualizar LCD
        break;
      case 1:
        // Imprimir menu en LCD
        lcd.clear();
        lcd.print("   Nombre");
        lcd.setCursor(0,1);
        lcd.print(" > Fecha");
        evento = 0;               // Dejar de actualizar LCD
        break;
      case 0:
        // Imprimir menu en LCD
        lcd.clear();
        lcd.print("   Fecha");
        lcd.setCursor(0,1);
        lcd.print(" > num fav");
        evento = 0;               // Dejar de actualizar LCD
        break;
    }
  }
  if(evento == 2){                // Entrar en la seleccion
    switch(seleccion){
      case 3:
        // Imprimir seleccion en LCD
        lcd.clear();
        lcd.print(hora);
        evento = 0;               // Dejar de actualizar LCD
        break;
      case 2:
        // Imprimir seleccion en LCD
        lcd.clear();
        lcd.print(nombre);
        evento = 0;               // Dejar de actualizar LCD
        break;
      case 1:
        // Imprimir seleccion en LCD
        lcd.clear();
        lcd.print(fecha);
        evento = 0;               // Dejar de actualizar LCD
        break;
      case 0:
        // Imprimir seleccion en LCD
        lcd.clear();
        lcd.print(num_fav);
        evento = 0;               // Dejar de actualizar LCD
        break;
    }
  }
}
Actualmente no está disponible la solución a la actividad en Bloques.
Vistas
11 Número de vistas
11 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.