Saturday, January 2, 2016

Using a 4x4 Keypad

Part 1 - I was working on a project for someone who needed a keypad for password entry. I couldn't find my 3x4 keypad, but found a 4x4 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.


/* @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

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...