Subscribe to Arduino Academy and start learning today for FREE!

Using a 4×4 Keypad

Part 1 – I was working on a project for someone who needed a keypad for password entry. I couldn’t find my 3×4 keypad, but found a 4×4 keypad in one of my parts boxes. I modified the example sketch that comes with the excellent keypad library to work with this particular keypad. I couldn’t find a set of extended headers to directly connect the keypad to the Arduino, so I used a small protoboard.

You do need the library from http://playground.arduino.cc/Code/Keypad

I connected all the pins from the keypad, from left to right, to 9-2 on the Arduino. Key output shows in the Serial Monitor. In Part 2 I’ll show how to accept and compare passwords.

Become the Maker you were born to be. Try Arduino Academy for FREE!

/* @file MultiKey.ino
|| @version 1.0
|| @author Mark Stanley
|| @contact mstanley@technologist.com
||
|| @description
|| | The latest version, 3.0, of the keypad library supports up to 10
|| | active keys all being pressed at the same time. This sketch is an
|| | example of how you can get multiple key presses from a keypad or
|| | keyboard.
|| #
*/

#include

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{‘1′,’2′,’3′,’A’},
{‘4′,’5′,’6′,’B’},
{‘7′,’8′,’9′,’C’},
{‘*’,’0′,’#’,’D’}
};
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the kpd
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the kpd

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

unsigned long loopCount;
unsigned long startTime;
String msg;

void setup() {
Serial.begin(9600);
loopCount = 0;
startTime = millis();
msg = “”;
}

void loop() {
loopCount++;
if ( (millis()-startTime)>5000 ) {
Serial.print(“Average loops per second = “);
Serial.println(loopCount/5);
startTime = millis();
loopCount = 0;
}

// Fills kpd.key[ ] array with up-to 10 active keys.
// Returns true if there are ANY active keys.
if (kpd.getKeys())
{
for (int i=0; i        {
if ( kpd.key[i].stateChanged )   // Only find keys that have changed state.
{
switch (kpd.key[i].kstate) {  // Report active key state : IDLE, PRESSED, HOLD, or RELEASED
case PRESSED:
msg = ” PRESSED.”;
break;
case HOLD:
msg = ” HOLD.”;
break;
case RELEASED:
msg = ” RELEASED.”;
break;
case IDLE:
msg = ” IDLE.”;
}
Serial.print(“Key “);
Serial.print(kpd.key[i].kchar);
Serial.println(msg);
}
}
}
}  // End loop

Become the Maker you were born to be. Try Arduino Academy for FREE!

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments

Archives

0
Would love your thoughts, please comment.x
()
x