Shield KeyPad para Arduino

Shield KeyPad para Arduino- Arduino

Este Shield para Arduino básicamente es una pantalla LCD, con dos filas y 16 columnas, con la posibilidad de usar unos botones frontales que trae incorporados, izquierda, derecha, arriba, abajo, selección y reset.

En muchas ocasiones necesitamos un display local  para nuestros proyectos de Arduino, y esta shield muy económica va muy bien en estos casos. 

Como podemos observar en la foto, esta shield está muy bien porque nos deja libre los pines digitales D0,D1,D2.D3,D11,D12 Y D13 , los de alimentación y  los pines analógicos (A1-A5), con lo que es ideal para incorporar algunos sensores y/o actuadores adicionales. Lo que si es cierto es que vienen sin soldar los pin, pero bueno es un mal menor teniendo en cuenta lo económico que sale.

Keypad arduino

Para usarla, usaremos la archiconocida biblioteca LiquidCrystal (LCD), veamos algunas de las funciones básicas de esta librería:

FUNCIONES BÁSICAS

  1. LiquidCrystal()
    Crea una variable de tipo LiquidCrystal. En nuestro caso declararemos esta variable asignando estos pines:
    LiquidCrystal lcd (8, 9, 4, 5, 6, 7); //Declara una variable tipo LCD que llamo lcd

  2. begin()
    Inicializa la interfaz de la pantalla LCD, y especifica las dimensiones (anchura y altura) de la pantalla. begin () debe ser llamado antes de cualquier otro comando de la biblioteca LCD.
    lcd.begin(16,2) //Inicializa mi_lcd con dos 16 columnas y dos filas

  3. clear()
    Borra la pantalla LCD y posiciona el cursor en la esquina superior izquierda.
    lcd.clear();

  4. home()
    Pone el cursor en la esquina superior izquierda de la pantalla LCD. Es decir, utiliza esa ubicación en la salida de texto subsiguiente a la pantalla. Para borrar también la pantalla, utilice la función clear() en su lugar.
    lcd.home();

  5. setCursor()
    Coloca el cursor del LCD; es decir, establece la ubicación en la que se mostrará el texto escrito a continuación en la LCD.
    lcd.setCursor(6,2); //Posiciono el cursor en la fila 2, columna 6

  6. print()
    Imprime un texto en la LCD
    lcd.print(«Hola Mundo!!»); 

  7. display() noDisplay()
    display(): Enciende la pantalla LCD, después de haber sido apagada con noDisplay(). 
    noDisplay(): Apaga la pantalla LCD, después de haber sido encendida con display().
    Esto, en ambos casos,  restaurará el texto (y el cursor) que estaba en la pantalla.

  8. scrollDisplayLeft() y  scrollDisplayRight()
    scrollDisplayLeft(): Desplaza el contenido de la pantalla (texto y el cursor) un espacio hacia la izquierda.
    scrollDisplayRight(): Desplaza el contenido de la pantalla (texto y el cursor) un espacio hacia la derecha


Veamos ahora algunos ejemplos de uso del display. En el primer ejemplo simplemente mostraremos por la pantalla el mensaje «Hola Mundo»

#include <LiquidCrystal.h>

// Inicizlizamos la librería
//Declaramos la variable lcd
LiquidCrystal lcd(8,9,4,5,6,7);

void setup() {
  // definimos el número de columnas y filas
  lcd.begin(16, 2);
  // Imprimimos en pantalla el mensaje
  lcd.print("hola, mundo!");
}

void loop() {
  // ponemos el cursor en la  columna 0, línea 1(segunda fila)
  lcd.setCursor(0, 1);
  // mostramos en pantalla el número de segundos desde el inicio o desde que se hizo reset
  lcd.print(millis() / 1000);
}

En este segundo ejemplo vamos a hacer uso de las funciones de scroll.

#include <LiquidCrystal.h>
// Inicializamos la libnrería con los números de los pines
// El módulo Arduino LCD KeyPad Shiel

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
 // establece el número de LEDs de columnas y filas:
 lcd.begin(16, 2);
 // Imprime un mensaje en la LCD.
 lcd.print("Hola, mundo!");
}

void loop() {
 // Desplaza 13 posiciones (longitud de cadena) a la izquierda 
 // moviendo el texto hacia fuera de la pantalla a la izquierda:
 for (int positionCounter = 0; positionCounter < 13; positionCounter++) {
 // desplaza una posicion a la izquierda:
 lcd.scrollDisplayLeft();
 // espera un poco tiempo:
 delay(250);
}

// Desplaza 29 posiciones (longitud de cadena) a la derechs 
// moviendo el texto hacia fuera de la pantalla a la derecha:
for (int positionCounter = 0; positionCounter < 29; positionCounter++) {
// desplaza una posicion a la derecha:
lcd.scrollDisplayRight();
// espera un poco tiempo:
delay(250);
}

// desplaza 16 posiciones (longitud de la pantalla + longitud de la cadena) a la izquierda
// devolviendo el texto al centro:

for (int positionCounter = 0; positionCounter < 16; positionCounter++) {

// desplaza una posicion a la izquierda:
 lcd.scrollDisplayLeft();
 
delay (250);
}
// temporiza al final del bucle completo:
 delay (1000);

}

Y en el último ejemplo vamos a ver como pasamos la información de la pulsación de las teclas, qeu utilizan la entrada analógica A0, para leer la información, observa como al pulsar cada una de los pulsadores, izquierda, derecha, arriba y abajo, encendemos un led de un color, y si pulsamos la tecla select, se encienden y apagan todos varias veces.

#include <LiquidCrystal.h>

// Inicializamos la libnrería con los números de los pines
// El módulo Arduino LCD KeyPad Shiel

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int RED=2;
int YELOW=3;
int GREEN=11;
int BLUE=12;
int retraso=100;

int adc_key_in  = 0;
int lcd_key     = 0;


//Contantes para identificar las teclas
#define btnDERECHA      0
#define btnARRIBA      1
#define btnABAJO       2
#define btnIZQUIERDA   3
#define btnSELECT      4
#define btnNADA        5


//función que lee la pulsación de teclas del KeyPad Shield

int read_LCD_buttons()
{
 adc_key_in = analogRead(0);      // Leer la entrada analógica

 //Las teclas se conectan a un divisor resistivo que produce distintos valores de tensión según la tecla pulsada
 
 if (adc_key_in > 1000) return btnNADA; //Si no hay ninguna tecla pulsada, sale para demorar menos tiempo
 if (adc_key_in < 50)   return btnDERECHA;  
 if (adc_key_in < 195)  return btnARRIBA; 
 if (adc_key_in < 380)  return btnABAJO; 
 if (adc_key_in < 555)  return btnIZQUIERDA; 
 if (adc_key_in < 790)  return btnSELECT;   

 return btnNADA;  // No debería llegar aquí, pero por las dudas retorna este valor.
}


void setup() {

Serial.begin(9600);
pinMode(RED, OUTPUT);  
pinMode(YELOW, OUTPUT);  
pinMode(GREEN, OUTPUT);  
pinMode(BLUE, OUTPUT);  

digitalWrite(RED,LOW);
digitalWrite(YELOW,LOW);
digitalWrite(GREEN,LOW);
digitalWrite(BLUE,LOW);

lcd.begin(16, 2);// definimos número de columnas y filas del LCD
lcd.clear();  //borramos pantalla
lcd.setCursor(0,0);
lcd.print("JUEGO DE LEDS");
lcd.setCursor(0,1);
lcd.print("PULSA UNA TECLA");
}

void loop() {
//Descomentar código para hacer funcionar el sensor SR04 sin necesiad de usar librería
delay (50); 
   
lcd_key = read_LCD_buttons();  // Lee las teclas

 switch (lcd_key)               // Imprime un texto según el valor de la tecla detectada
 {
   case btnDERECHA:
     {
      digitalWrite(RED,HIGH);
     digitalWrite(YELOW,LOW);
     digitalWrite(GREEN,LOW);
     digitalWrite(BLUE,LOW);
     delay (retraso);
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("LED ROJO ENCENDIDO");
     break;
     }
   case btnIZQUIERDA:
     {
     digitalWrite(RED,LOW);
     digitalWrite(YELOW,HIGH);
     digitalWrite(GREEN,LOW);
     digitalWrite(BLUE,LOW);
     delay (retraso);
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("LED AMARILLO ENCENDIDO");
     
     break;
     }
   case btnARRIBA:
     {
     digitalWrite(RED,LOW);
     digitalWrite(YELOW,LOW);
     digitalWrite(GREEN,HIGH);
     digitalWrite(BLUE,LOW);
     delay (retraso);
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("LED VERDE ENCENDIDO");
     break;
     }
   case btnABAJO:
     {
     digitalWrite(RED,LOW);
     digitalWrite(YELOW,LOW);
     digitalWrite(GREEN,LOW);
     digitalWrite(BLUE,HIGH);
     delay (retraso);
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("LED AZUL ENCENDIDO");
     break;
     }
   case btnSELECT:
     {
     for (int i=0;i<3;i++){
     digitalWrite(RED,HIGH);
     delay (retraso);
     digitalWrite(RED,LOW);
     delay (retraso);
     digitalWrite(YELOW,HIGH);
     delay (retraso);
     digitalWrite(YELOW,LOW);
     delay (retraso);
     digitalWrite(GREEN,HIGH);
     delay (retraso);
     digitalWrite(GREEN,LOW);
     delay (retraso);
     digitalWrite(BLUE,HIGH);
     delay (retraso);
     digitalWrite(BLUE,LOW);
     delay (retraso);
     }
     break;
     }
     case btnNADA:
     {
     break;
     }
 }
}

También puedes ver un ejemplo de este Shield en el siguiente proyecto: Arduino Counter Lap

Deja un comentario