79 lines
2.1 KiB
Arduino
79 lines
2.1 KiB
Arduino
|
/* @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 <Keypad.h>
|
||
|
|
||
|
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 kpd
|
||
|
byte colPins[COLS] = {8, 7, 6}; //connect to the column 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<LIST_MAX; i++) // Scan the whole key list.
|
||
|
{
|
||
|
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
|