Para este proyecto use el teclado de sparkfun de 12 teclas (0-9, *, # ) este teclado tiene el siguiente diagrama:
como se ve en la figura, el teclado cuenta con 7 pines de control. por ejemplo cuando aprietas la tecla numero 1 se conectan los pines 2 y 3, para la tecla 5 se conectan los pines 7 y 1.
después de comprobar cuales son los pines correspondientes a las filas (2,7,6,4) y columnas (3,1,5) del teclado matricial, definimos a que entradas del arduino van a ir conectado. en nuestro caso los defino de la siguiente forma:
pin del tecla(1, 2, 3, 4, 5, 6, 7) CONECTADOS RESPECTIVAMENTE A
pin del arduino(7D, 5D, 8D, 2D, 6D, 3D, 4D).
A la vez se conectaran resistencias de un 10K ohm a los pines correspondientes a las filas del teclado y el otro extremo de las resistencias se conectaran a 5v como se ve en la figura:
Código
El programa consiste en visualizar en el monitor serial del arduino, cada tecla presionada del teclado matricial.
Antes de ejecutar el programa, baja el keypad.zip , descomprime y coloca la carpeta en "hardware\libraries\".
Aquí el programa que use:
//////////////////////////////////////////////////////////////////
//©2011
//Released under the MIT License - Please reuse change and share
//Reads the keys pressed on a keypad
//Thanks to Alexander Brevig for his original keypad code.
/////////////////////////////////////////////////////////////////
#include <Keypad.h> //needs to be in the library folder (Arduino/Libraries)
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {8, 7, 6}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600); //initialise the serial port (9600 baud)
}
void loop(){
char key = keypad.getKey();
if (key != NO_KEY){
Serial.println(key); //print to serial the key that has been pressed
}
}
Este comentario ha sido eliminado por el autor.
ResponderEliminarMuy interesante el post. Hace poco que he empezado a trastear con Arduino, y me ha ayudado a entender mejor como funciona el keypad.
ResponderEliminarMe gustaría apuntar, que las resistencias de 10k y la conexión al pin de 5V no son necesarias. La librería "keypad", ya configura los pines en modo "INPUT_PULLUP", facilitando el montaje.
Lo he probado, y en efecto, funciona sin ellas perfectamente.
Un saludo!!
Hola,
Eliminarsi sabia de "INPUT_PULLUP" pero opte por poner un ejemplo com resistencias.
Saludos
Buenas, muy interesante, quisiera saber si este proyecto puede funcionar con cualquier teclado matricial por que tengo uno de 4x4 que no le se ni la marca... agradeceria su respuesta
ResponderEliminarHola;
EliminarSi funciona,conectarias tu teclado a un pin mas de tu microcontrolador y en tu programa son cambios básico.
gracias por responder
ResponderEliminarcomo seria para activar las resistencias de PULL UP, escribir una linea de codigo mas??
ResponderEliminarmuy buena informacion
Cordial saludo
No lo entiendo. En el dibujo las resistencias están conectadas a los pines 1, 3, 5 y 7. Pero las filas son los pines 2,7,6 y 4. ¿Es un error o es que no entiendo algo?
ResponderEliminarGracias.
Hola, oye, podrías ayudarme a conectar un teclado matricial con Arduino y Labview por favor??
ResponderEliminarhola,
ResponderEliminarestoy intentando conectar mi teclado 4*3 a un 74hc147, y lo que sucede es que no entiendo las entradas del integrado con las salidas del teclado,
gracias
Como puedo enviar los datos del teclado a java
ResponderEliminarBuenisimo, me funcionó a la perfección, para mi las resistencias fueron necesarias sino la escritura de carácteres es errática. Igualmente pude comprender el orden de filas y columnas en base a la membrana mostrada en este link https://www.walmart.ca/en/ip/3x4-Array-Matrix-Keypad-for-Access-Control-for-Arduino-etc-Hard-Keys/PRD2Z2V4KT0N96O por esto los pines no son correlativos. Muchas gracias
ResponderEliminarHumm también me funcionó perfecto activando las pullup de las resistencias indicadas en el circuito.
ResponderEliminarvoid setup() {
Serial.begin(9600);
pinMode(8,INPUT_PULLUP);
pinMode(6,INPUT_PULLUP);
pinMode(3,INPUT_PULLUP);
pinMode(4,INPUT_PULLUP);
}
Me sirvió mucho, gracias!!!!!