/*
* Programación del teclado de tipo matricial también conocido como interruptor de membrana.
*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include "Keypad.h" //Librería necesaria para controlar el interruptor de membrana (Herramientas > Administrador de bibliotecas > Keypad).
/*Definición de dos variables constantes de 8 bits cada una, lo que nos sirven para guardar los valores (valores entre 0 y 255) introducidos por teclado.*/
const byte FILAS = 4; // Número de filas.
const byte COLUMNAS = 4; // Número de columnas.
//Definición de una matriz con todas las teclas que componen el teclado.
char teclas[FILAS][COLUMNAS] =
{
{'1','2','3', 'A'}, //Fila(0), Columnas(0, 1, 2, 3); Hola soy un tigre rosa.
{'4','5','6', 'B'}, //Fila(1), Columnas(0, 1, 2, 3);
{'7','8','9', 'C'}, //Fila(2), Columnas(0, 1, 2, 3);
{'*','0','#', 'D'} //Fila(3), Columnas(0, 1, 2, 3);
};
byte filasPines[FILAS] = {12, 11, 10, 9}; //Pines a los que están conectadas las teclas de las filas.
byte columnasPines[COLUMNAS] = {8, 7, 6, 5}; //Pines a los que están conectadas las teclas de las columnas.
Keypad keypad = Keypad(makeKeymap(teclas), filasPines, columnasPines, FILAS, COLUMNAS); //Declaración de la variable objeto de tipo Keypad.
#define r 13
#define g 4
#define b 2
void setup()
{
Serial.begin(9600); //Establecimiento de la comunicación arduino - pc a 9600 baudios de velocidad.
pinMode(r,OUTPUT);
pinMode(g,OUTPUT);
pinMode(b,OUTPUT);
lcd.init();
lcd.backlight();
}
void loop()
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Tecla pulsada:");
lcd.setCursor(7,1);
char tecla;
tecla = keypad.getKey();
if(tecla != NO_KEY) //tecla == true
{
Serial.println(tecla);
lcd.print(tecla);
if(tecla == '1')
{
digitalWrite(r, HIGH);
digitalWrite(g, LOW);
digitalWrite(b, LOW);
}
else if(tecla == '2')
{
digitalWrite(r, LOW);
digitalWrite(g, HIGH);
digitalWrite(b, LOW);
}
else if(tecla == '3')
{
digitalWrite(r, LOW);
digitalWrite(g, LOW);
digitalWrite(b, HIGH);
}
else if(tecla == '4')
{
digitalWrite(r, HIGH);
digitalWrite(g, HIGH);
digitalWrite(b, HIGH);
}
else if(tecla == '5')
{
digitalWrite(r, LOW);
digitalWrite(g, LOW);
digitalWrite(b, LOW);
}
}
else
{
Serial.println("Información no encontrada");
lcd.setCursor(0,1);
lcd.print("Sin informacion");
}
//Es necesario añadir este delay para visualizar la tecla pulsada.
delay(250);
}