jueves, 14 de julio de 2011

Arduino y teclado 3x4

  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
  }
}

13 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Muy interesante el post. Hace poco que he empezado a trastear con Arduino, y me ha ayudado a entender mejor como funciona el keypad.

    Me 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!!

    ResponderEliminar
    Respuestas
    1. Hola,
      si sabia de "INPUT_PULLUP" pero opte por poner un ejemplo com resistencias.
      Saludos

      Eliminar
  3. 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

    ResponderEliminar
    Respuestas
    1. Hola;
      Si funciona,conectarias tu teclado a un pin mas de tu microcontrolador y en tu programa son cambios básico.

      Eliminar
  4. como seria para activar las resistencias de PULL UP, escribir una linea de codigo mas??
    muy buena informacion

    Cordial saludo

    ResponderEliminar
  5. 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?
    Gracias.

    ResponderEliminar
  6. Hola, oye, podrías ayudarme a conectar un teclado matricial con Arduino y Labview por favor??

    ResponderEliminar
  7. hola,
    estoy 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

    ResponderEliminar
  8. Como puedo enviar los datos del teclado a java

    ResponderEliminar
  9. Buenisimo, 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

    ResponderEliminar
  10. Humm también me funcionó perfecto activando las pullup de las resistencias indicadas en el circuito.

    void setup() {
    Serial.begin(9600);
    pinMode(8,INPUT_PULLUP);
    pinMode(6,INPUT_PULLUP);
    pinMode(3,INPUT_PULLUP);
    pinMode(4,INPUT_PULLUP);
    }

    Me sirvió mucho, gracias!!!!!

    ResponderEliminar