help with code for a numeric keypad

I’m trying to emulate a numeric keypad , but I want to be able to customize a few of the buttons . this is a modified version of code I found on the web for a 12 button keypad. I’m using a 16 button membrane keypad. at present i can’t get any function from row1 or column 1 .

mykey.ino (4.57 KB)

I’ll be glad to post the code if someone would tell me how?

a little more info on what I want to accomplish..when in my cnc program the number pad on my keyboard will jog all 3 axis..8 of the number keys move x and y axis according to the arrow on the key and + and - move z axis up and down. from the keyboard f2 and f3 start and stop the spindle and f8 and f9 raise and lower feedrate. Hence the reason I want to be able to customize the button functions.

Keypad Pinout:

Rows and columns are connected as such on the keypad:

| 1 | 2 | 3 | A |- 1 | 4 | 5 | 6 | B |- 2 | 7 | 8 | 9 | C |- 3

| * | 0 | # | D |- 4

| | | | 5 6 7 8

This is how they're connected to the ProMicro: Keypad Pin ------ Pro Micro Pin 1 ------------------ 2 2 ------------------ 3 3 ------------------ 4 4 ------------------ 5 5 ------------------ 6 6 ------------------ 7 7 ------------------ 8 8 ------------------ 9

*/
// Pins 1-7 of the keypad connected to the Arduino respectively:
int keypadPins[8] = {2, 3, 4, 5, 6, 7, 8, 9};
int keypadStatus; // Used to monitor which buttons are pressed.
int timeout; // timeout variable used in loop

void setup()
{
for (int i=0; i<9; i++)
{
pinMode(keypadPins*, INPUT); // Set all keypad pins as inputs*
_ digitalWrite(keypadPins*, HIGH); // pull all keypad pins high*_
* }*
}
void loop()
{
* keypadStatus = getKeypadStatus(); // read which buttons are pressed*
* if (keypadStatus != 0) // If a button is pressed go into here*
* {*
* sendKeyPress(keypadStatus); // send the button over USB*
* timeout = 2000; // top of the repeat delay*
* while ((getKeypadStatus() == keypadStatus) && (–timeout)) // Decrement timeout and check if key is being held down*
* delayMicroseconds(1);*
* while (getKeypadStatus() == keypadStatus) // while the same button is held down*
* {*
* sendKeyPress(keypadStatus); // continue to send the button over USB*
* delay(150); // 50ms repeat rate*
* }*
* }*
}
/* sendKeyPress(int key): This function sends a single key over USB
* It requires an int, of which the 12 LSbs are used. Each bit in*
* key represents a single button on the keypad.*
* This function will only send a key press if a single button*
_ is being pressed /_
void sendKeyPress(int key)
_
{_
_
switch(key)_
_
{_
_
case 1: // 0x001*_
_ Keyboard.write(‘1’); // Sends a keyboard ‘1’
* break;*
* case 2: // 0x002*
Keyboard.write(‘2’);
* break;*
* case 4: // 0x004*
Keyboard.write(‘3’);
* break;*
* case 8: // 0x008*
Keyboard.write(‘4’);
* break;*
* case 16: // 0x010*
Keyboard.write(‘5’);
* break;*
* case 32: // 0x020*
Keyboard.write(‘6’);
* break;*
* case 64: // 0x040*
Keyboard.write(‘7’);
* break;*
* case 128: // 0x080*
Keyboard.write(‘8’);
* break;*
* case 256: // 0x100*
Keyboard.write(‘9’);
* break;*
* case 512: // 0x200*
Keyboard.write(’+’);
* break;*
* case 1024: // 0x400*
Keyboard.write(‘0’); // Sends a keyboard ‘0’
* break;*
* case 2048: // 0x800*
Keyboard.write(’\n’); // Sends the ‘ENTER’ key_

* break;*
* }*
}
/* getKeypadStatus(): This function returns an int that represents
the status of the 12-button keypad. Only the 12 LSb’s of the return
value hold any significange. Each bit represents the status of a single
key on the button pad. ‘1’ is bit 0, ‘2’ is bit 1, ‘3’ is bit 2, …,
‘#’ is bit 11.
This function doesn’t work for multitouch.
*/
int getKeypadStatus()
{
* int rowPins[4] = {keypadPins[1], keypadPins[2], keypadPins[3], keypadPins[4]}; // row pins are 2, 7, 6, and 1 of the keypad*
* int columnPins[4] = {keypadPins[5], keypadPins[6], keypadPins[7], keypadPins[8]}; // column pins are pins 2, 4, and 5 of the keypad*
* int keypadStatus = 0; // this will be what’s returned*

_ /* initialize all pins, inputs w/ pull-ups /_
_
for (int i=0; i<9; i++)_
_
{_
_ pinMode(keypadPins, INPUT);
digitalWrite(keypadPins, HIGH);
}*_

* for (int row=0; row<4; row++)*
* { // initial for loop to check all 4 rows*
* pinMode(rowPins[row], OUTPUT); // set the row pin as an output*
* digitalWrite(rowPins[row], LOW); // pull the row pins low*
* for (int col=0; col<4; col++)*
* { // embedded for loop to check all 3 columns of each row*
* if (!digitalRead(columnPins[col]))*
* {*
_ keypadStatus |= 1 << ((row+1)3 + (col+1) - 4); // set the status bit of the keypad return value_
_ }
}
pinMode(rowPins[row], INPUT); // reset the row pin as an input*

* digitalWrite(rowPins[row], HIGH); // pull the row pin high*
* }*_

* return keypadStatus;*
[/quote]

and credits to the original author

/* keyPadHiduino Example Code by: Jim Lindblom date: January 5, 2012 license: MIT license - feel free to use this code in any way you see fit. If you go on to use it in another project, please keep this