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