Display LCD 16x2 para tu Arduino
Una de las cosas mas basicas es conectar un display o pantalla LCD de 16 x 2, 16 caracteres y 2 lineas.El más común de estos es el que tiene el chip compatible con el modelo HD44780 de Hitachi que es lo que mas se utiliza hoy en día.
En esta entrada tambien veremos como controlar la luz de fondo (backlight) con PWM (pulse-width modulation o modulación por ancho de pulsos) que es una de las capacidades de las tarjetas Arduino.
Si no están familiarizados con PWM lean esta entrada en Wikipedia, sera de utilidad. Y revisen la documentación de su placa Arduino.
Lista de Materiales
- Tarjeta Arduino - En mi caso Mega2560
- LCD 16x2 Hitachi HD44780 compatible
- 2 botones pushup
- 1 potenciometro 10k
- 2 resistencias 10k
Las Conexiones
En la imagen se muestra el como conectar la tarjeta Arduino con el display LCD 16x2, en este caso se necesitan seis pines para el LCD ya que estamos conectando el LCD en 4bits lo cual nos ayuda a mantener pines libres para otros usos.Ahora bien, conectando la luz de fondo directamente a Arduino nos da la oportunidad desde la interfaz programable de controlar su comportamiento sin la necesidad de agregar componentes externos. Pero con la desventaja de ocupar un pin mas.
Explicando el código
#include LiquidCrystal lcd(12, 11, 6, 5, 4, 3);
const int buttonPinDown = 24; // the number of the pushbutton pin
const int buttonPinUp = 25;
const int ledPin = 13; // número del pin para el LED
const int ScreenPin = 8; // Pin para pantalla, en este caso la luz de fondo
int buttonStateUp = 0; // variable para leer el botón UP
int buttonStateDown = 0; // variable para leer el botón DOWN
int contador = 0, backLight = 0, porcentaje = 0, funcion = 0;//Contadores
boolean func = false;
boolean screenon = true;
void setup() {
lcd.begin(16, 2);//Inicializamos la pantalla LCD
pinMode(ledPin, OUTPUT); //Inicializamos el pin del Led
pinMode(buttonPinUp, INPUT); //Inicializamos el pin para el botón UP
pinMode(buttonPinDown, INPUT); //Inicializamos el pin para el botón Down
InitBacklight();//Inicializamos las funciones para imprimir en pantalla
}
void loop() {
Backlight(); //Siempre se esta ejecutando a la espera de comandos
}
void InitBacklight()
{
backLight = 128;
porcentaje = (backLight * 100) / 255;
analogWrite(ScreenPin, backLight);
// Print a message to the LCD.
lcd.print("Welcome! Backlight dim test.");
lcd.setCursor(0,1);
lcd.print("BL: " + String(porcentaje) + "% - " + String(backLight));
delay(2000);
}
void Backlight()
{
buttonStateUp = digitalRead(buttonPinUp);//Leemos el estado del pin UP
buttonStateDown = digitalRead(buttonPinDown);//Leemos el estado del pin DOWN
if(backLight <= 255) { backLight = 255; }
if(buttonStateUp == HIGH)//Si el botón UP fue precionado
{
digitalWrite(ledPin, HIGH);//Flasheo del LED
if(backLight >= 0 && screenon == false)//En caso de que la luz este en 0
{
lcd.display();//Encendemos el LCD
screenon = true;//Modificamos la variable
}
backLight += 10; // Incrementamos en pasos de 10
if(backLight >= 255) { backLight = 255; }//No dejamos que el valor de la luz de fondo supere 255 ya que es el ciclo de trabajo máximo del PWM
func = true;//Para modificar los mensajes en pantalla
}
if (buttonStateDown == HIGH)
{
digitalWrite(ledPin, HIGH);
backLight -= 10;
if(backLight <= 0) { backLight = 0; } // No dejamos que el valor sea menor a 0
if(backLight <= 0 && screenon == true)
{
lcd.noDisplay();//Apagamos el display, esto no borra los datos del cache del display
screenon = false; //Cambiamos la variable a apagado
}
func = true;//Para modificar los mensajes en pantalla
}
if(func)//Si alguno de los dos botones fue presionado
{
lcd.clear();//Limpiamos la pantalla
porcentaje = (backLight * 100) / 255; //Calculamos el porcentaje de luz de fondo
lcd.setCursor(0,0);//Ponemos el cursor en el primer carácter de la pantalla
lcd.print("Luz Modificada.");//Imprimimos un mensaje en la pantalla
lcd.setCursor(0,1);//Movemos el curso a la segunda linea
lcd.print("BL: " + String(porcentaje) + "% - " + String(backLight));//Imprimimos el porcentaje y valor
digitalWrite(ledPin, LOW);//Apagamos el LED
analogWrite(Pantalla, backLight);//Mandamos el nuevo valor de PWM y esto modificara la luz de fondo
func = false;//Cambiamos para no entrar en la sección del codigo
delay(200);//Este delay nos ayuda a manejar los clicks en los botones evitando dar un "doble botonazo"
}
}
Como se puede ver no se necesita mucho código, incluso el que presento es muy rustico pero cumple su cometido, adicionalmente que también fue una de las primeras cosas que aprendí a hacer cuando adquirí mi equipo.
Por ultimo les dejo un video de como se ve en funcionamiento.
Espero que esto les ayude en sus proyectos!
Muy bueno el post, tengo una duda. De donde sacaste los graficos? Yo estoy trabajando con la página https://123d.circuits.io pero no tiene el arduino mega y quiero trabajar con tal. Gracias!
ResponderEliminar