I was looking for a keypad with 26+ keys to represent the English alphabet but not only I couldn't find any but also the idea of having two keypads seemed inconvenient and too much work, so I needed to find a way to turn my 4X4 keypad into at least a 4X4X2 which later as I found out could be easily be turned into 4X4XN ie you can have each key of your keypad represent as many different characters given that they are somewhat mathematically related.

in this instructable I will show you have to make a 4X4X3 where each key represents three consecutive letters.

## Step 1: Lets Get Our Components

1- a Keypad , we will be using a 4X4 but any size could do

2- 8 male - male jumper Wires

and that's all, aside from your arduino of course :)

## Step 2: Lets Connect Our Circut

2- connect the other end to arduino in same order in which they are connected to keypad, I choose from pin 5-12

## Step 3: Lets Code

the main logic behind the code is to make use of a predefined function within the Keypad library, which is the getState(). through which we can tell:

1 - when a key is press to save Value

2- if and when and for how long a key is held, such that :

a- no hold = original character

b- short hold = original character +1

c- long hold = original character +2

3-when a key is released , where we will be adding our hold variable to mapped character and print;

```#includeconst byte rows = 4;const byte columns = 4;int holdDelay = 500; //how long each hold will last
int n = 3; // how many letters we want each key to represent
int state = 0; //used to indicate if hold occured and for how long, state =0 no hold ,state =1 short hold , state = 2 long hold
char key = 0;//we will definne the key map as on the key pad: * notice each letter is spaced by 3 which our n
char keys[rows][columns] =
{
{'a', 'd', 'g', 'j'},
{'m', 'p', 's', 'v'},
{'y', '1', '4', '7'},
{'-', '-', '#', '-'}
};byte rowPins[rows] = {5, 6, 7, 8};
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);}void loop() {
// put your main code here, to run repeatedly:
char temp = keypad.getKey();  if ((int)keypad.getState() ==  PRESSED) {    if (temp != 0) {
key = temp;
}
}
state++;
state = constrain(state, 1, n-1);
delay(holdDelay);
}  if ((int)keypad.getState() ==  RELEASED) {    key += state;
state = 0;
Serial.println(key);  }  delay(100);
}```