Inicio / Arduino

Placa de desarrollo Arduino UNO - LCD

Un LCD (Liquid Crystal Display) es una pantalla de cristal líquido que se usa para mostrar texto, números y caracteres simples en proyectos electrónicos. En este ejemplo montamos un contador de 0 a 9999 controlado por dos pulsadores.

Conexiones

Además de los seis pines de datos, el módulo necesita alimentación y el ajuste de contraste. Sin el potenciómetro en V0 la pantalla enciende pero no se ve nada, que es el fallo más habitual al montarlo por primera vez.

Pin del LCDConexiónNota
RSPin 4Selección de registro
ENPin 5Habilitación
D4D7Pines 6, 7, 8, 9Bus de datos de 4 bits
VSSGND
VDD5 V
V0Potenciómetro 10 kΩAjuste de contraste
A5 V con resistencia 220 ΩRetroiluminación
KGNDRetroiluminación
Pulsadores: SWITCH1 en A2 (subir) y SWITCH2 en A3 (bajar), ambos a GND con INPUT_PULLUP.

Código del programa

Arduino / C++
#include <LiquidCrystal.h>

// Definición de pines según el diagrama
const int RS = 4;
const int EN = 5;
const int D4 = 6;
const int D5 = 7;
const int D6 = 8;
const int D7 = 9;

const int SWITCH1 = A2;  // Subir
const int SWITCH2 = A3;  // Bajar

LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);

int contador = 0;

void setup() {
  pinMode(SWITCH1, INPUT_PULLUP);
  pinMode(SWITCH2, INPUT_PULLUP);

  lcd.begin(16, 2);           // LCD de 16 columnas y 2 filas
  lcd.setCursor(0, 0);
  lcd.print("Contador:");
  lcd.setCursor(0, 1);
  lcd.print(contador);
}

void loop() {
  // Switch 1 -> subir
  if (digitalRead(SWITCH1) == LOW) {
    contador++;
    if (contador > 9999) contador = 9999;
    actualizarLCD();
    delay(200);
  }

  // Switch 2 -> bajar
  if (digitalRead(SWITCH2) == LOW) {
    contador--;
    if (contador < 0) contador = 0;
    actualizarLCD();
    delay(200);
  }
}

void actualizarLCD() {
  lcd.setCursor(0, 1);
  lcd.print("      ");   // Limpiar la fila (6 espacios)
  lcd.setCursor(0, 1);
  lcd.print(contador);
}

Cómo funciona

La primera fila del LCD muestra el texto Contador:, que permanece fijo. La segunda muestra el valor numérico, que sube con SWITCH1 y baja con SWITCH2.

La función actualizarLCD() primero limpia la segunda fila con espacios en blanco y luego escribe el nuevo valor. Esto evita que queden restos del número anterior, por ejemplo al pasar de 100 a 99.

La librería LiquidCrystal ya viene incluida en el Arduino IDE, así que no hace falta instalar nada extra.

Posibles mejoras

El delay(200) frena el rebote de los pulsadores, pero también bloquea el resto del programa durante ese tiempo. Si más adelante añades más funciones, conviene sustituirlo por una comprobación con millis() para no detener el bucle.