Arduino Library – Keypad
Installatie van Arduino IDE libraries: Arduino info
Informatie (ENG)
Keypad is a library for using matrix style keypads with the Arduino. As of version 3.0 it now supports mulitple keypresses.
This library is based upon the Keypad Tutorial.
It was created to promote Hardware Abstraction. It improves readability of the code by hiding the pinMode and digitalRead calls for the user.
Keypad library is part of the Hardware Abstraction libraries.
You won’t need external resistors or diodes because the library uses the internal pullup resistors and additonally ensures that all unused column pins are high-impedance.
Creation
Keypad(makeKeymap(userKeymap), row[], col[], rows, cols)
1 2 3 4 5 6 7 8 9 10 11 |
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 ); |
Instantiates a Keypad object that uses pins 5, 4, 3, 2 as row pins, and 8, 7, 6 as column pins.
This keypad has 4 rows and 3 columns, resulting in 12 keys.
Functions
void begin(makeKeymap(userKeymap))
Initializes the internal keymap to be equal to userKeymap
[See File -> Examples -> Keypad -> Examples -> CustomKeypad]
char waitForKey()
This function will wait forever until someone presses a key. Warning: It blocks all other code until a key is pressed. That means no blinking LED’s, no LCD screen updates, no nothing with the exception of interrupt routines.
char getKey()
Returns the key that is pressed, if any. This function is non-blocking.
KeyState getState()
Returns the current state of any of the keys.
The four states are IDLE, PRESSED, RELEASED and HOLD.
boolean keyStateChanged()
New in version 2.0: Let’s you know when the key has changed from one state to another. For example, instead of just testing for a valid key you can test for when a key was pressed.
setHoldTime(unsigned int time)
Set the amount of milliseconds the user will have to hold a button until the HOLD state is triggered.
setDebounceTime(unsigned int time)
Set the amount of milliseconds the keypad will wait until it accepts a new keypress/keyEvent. This is the “time delay” debounce method.
addEventListener(keypadEvent)
Trigger an event if the keypad is used. You can load an example in the Arduino IDE.
[See File -> Examples -> Keypad -> Examples -> EventSerialKeypad] or see the KeypadEvent Example code.
For Now
Here’s the list of multi-keypress functions and the keylist definition.
- Key key[LIST_MAX]
- bool getKeys()
- bool isPressed(char keyChar)
- int findInList(char keyChar)
FAQ
How do I use multiple Keypads?
Keypad is a class. Therefore to use multiple Keypad, you must create an instance for each of them. In the example above, the Keypad instance keypad) was bound to the digital pins 2, 3, 4, 5, 6, 7 and 8.
To add a Keypad bound to digital pins 9, 10, 11, 12, 13, 14, 15 and 16, you could create the following instance keypad2:
1 2 3 4 5 6 7 8 9 10 11 12 |
const byte ROWS2 = 4; //four rows const byte COLS2 = 4; //four columns char keys2[ROWS2][COLS2] = { {'.','a','d','1'}, {'g','j','m','2'}, {'p','t','w','3'}, {'*',' ','#','4'} }; byte rowPins2[ROWS2] = {12, 11, 10, 9}; //connect to the row pinouts of the keypad byte colPins2[COLS2] = {16, 15, 14, 13}; //connect to the column pinouts of the keypad Keypad keypad2 = Keypad( makeKeymap(keys2), rowPins2, colPins2, ROWS2, COLS2 ); |
And now it’s just a matter of using whatever function is wanted on each keypad:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//update instances and possibly fire funcitons void loop(){ char key1 = keypad.getKey(); char key2 = keypad2.getKey(); if (key1 != NO_KEY || key2 != NO_KEY){ Serial.print("You pressed: "); Serial.print(key1 != NO_KEY ? key1 : "nothing on keypad"); Serial.print(" and "); Serial.print(key2 != NO_KEY ? key2 : "nothing on keypad2"); Serial.println("."); } } |
How do I use setDebounceTime(unsigned int time)?
In Arduino follow the main menu from File-> Examples-> Keypad-> Examples->DynamicKeypad. Once the sketch is open find setup() and there you will see:
1 2 3 4 5 6 7 |
void setup() { Serial.begin(9600); digitalWrite(ledPin, HIGH); // Turns the LED on. keypad.addEventListener(keypadEvent); // Add an event listener. keypad.setHoldTime(500); // Default is 1000mS keypad.setDebounceTime(250); // Default is 50mS } |
This shows that the debounce time will allow one key press every 250 milliseconds. If multiple key presses occur within that time frame (as would happen when a key is bouncing) then those extra presses are simply ignored.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
3.1 2013-01-15 - Mark Stanley : Fixed missing RELEASED & IDLE status when using a single key. 3.0 2012-07-12 - Mark Stanley : Made library multi-keypress by default. (Backwards compatible) 3.0 2012-07-12 - Mark Stanley : Modified pin functions to support Keypad_I2C 3.0 2012-07-12 - Stanley & Young : Removed static variables. Fix for multiple keypad objects. 3.0 2012-07-12 - Mark Stanley : Fixed bug that caused shorted pins when pressing multiple keys. 2.0 2011-12-29 - Mark Stanley : Added waitForKey(). 2.0 2011-12-23 - Mark Stanley : Added the public function keyStateChanged(). 2.0 2011-12-23 - Mark Stanley : Added the private function scanKeys(). 2.0 2011-12-23 - Mark Stanley : Moved the Finite State Machine into the function getKeyState(). 2.0 2011-12-23 - Mark Stanley : Removed the member variable lastUdate. Not needed after rewrite. 1.8 2011-11-21 - Mark Stanley : Added decision logic to compile WProgram.h or Arduino.h 1.8 2009-07-08 - Alexander Brevig : No longer uses arrays 1.7 2009-06-18 - Alexander Brevig : Every time a state changes the keypadEventListener will trigger, if set. 1.7 2009-06-18 - Alexander Brevig : Added setDebounceTime. setHoldTime specifies the amount of microseconds before a HOLD state triggers 1.7 2009-06-18 - Alexander Brevig : Added transitionTo 1.6 2009-06-15 - Alexander Brevig : Added getState() and state variable 1.5 2009-05-19 - Alexander Brevig : Added setHoldTime() 1.4 2009-05-15 - Alexander Brevig : Added addEventListener 1.3 2009-05-12 - Alexander Brevig : Added lastUdate, in order to do simple debouncing 1.2 2009-05-09 - Alexander Brevig : Changed getKey() 1.1 2009-04-28 - Alexander Brevig : Modified API, and made variables private 1.0 2007-XX-XX - Mark Stanley : Initial Release |
Dowload Keypad library @ Github
Download Keypad I2C addons @ Github
[#/arduino/libraries/keypad” ]