Combining digits from the keypad.getKey() function

Keypad matrix, using the library: http://arduino.cc/playground/Code/Keypad

...

void loop(){
  char key = keypad.getKey();
  
  if (key != NO_KEY) {
    Serial.println(key);
  }
}

If the user wanted to input the number 10, how would I 'get' that number from the two keypresses '1' and '0' I haven't written any code yet for the keypad, but here's what I'm thinking: lcd.print: "Enter the number of cups of coffee & press #" user can enter a number (2,4,6,8,10) So if they they enter 2 digits, I need to combine them into 1 variable.

Well, just take the inputs & do some math on it: before reading clear the prior entries digit1 = 0 digit0 = 0

after you get the entries total = 10*(digit1) + digit0

Or, you will have a 4x3 keypad? Make one of the keys = 10. 1-2-3-4-5-6-7-8-9-10-enter-clear 0 = 10,

= clear,

  • = enter

CrossRoads: Well, just take the inputs & do some math on it: before reading clear the prior entries digit1 = 0 digit0 = 0

after you get the entries total = 10*(digit1) + digit0

Or, you will have a 4x3 keypad? Make one of the keys = 10. 1-2-3-4-5-6-7-8-9-10-enter-clear 0 = 10,

= clear,

  • = enter

Thanks, yes, 3x4, I see now. I could do either of these...

im just wondering about the maths part, as to whether it would still parse as ASCII? and thus be useless for any Math type functions. the only reason Im bringing up this old(ish) thread is that I had a similar problem trying to parse these numbers as REAL ones rather than some arbitrary ASCII equiv.
after a good mess about I discovered that you CAN in fact do this with the keypad Lib, my HEX keymap now looks like:

char keys[ROWS][COLS] = {
{0x000c,0x000d,0x000e,0x000f},
{0x0008,0x0009,0x000a,0x000b},
{0x0004,0x0005,0x0006,0x0007},
{0x0000,0x0001,0x0002,0x0003}
};

This isnt the End of my Journey yet, as I still need to then push these out to 1 Byte serial piso 74595s yet ( 3 of them) 2 for Address and one for Data.
but it`s enough to perhaps help Some along the way :wink:

All the best!

as char is only one byte big your char map should be

char keys[ROWS][COLS] = {
{0x0c,0x0d,0x0e,0x0f},
{0x08,0x09,0x0a,0x0b},
{0x04,0x05,0x06,0x07},
{0x00,0x01,0x02,0x03}
};

but better use the chars directly in your array :

char keys[3][4] = {
{‘7’,‘8’,‘9’},
{‘4’,‘5’,‘6’},
{‘1’,‘2’,‘3’},
{’*’.‘0’.’#’}
};

or use the int values you want except for the * and # all is possible.

char keys[3][4] = {
{7,8,9},
{4,5,6},
{1,2,3},
{’*’,0,’#’}
};

yeah, this is still a bit new(ish) to me, the problem that I`m going to (have already) hit, is concatenating 2 Hex values into a single byte to push out to the Hardware serial array.

I certainly can`t Add them. and I see no Nibble Splice command??????

and my Math is pathetic on a Good day :)

upper_nibble = upperByte<<4 ; // shifts bits 4 left, leaving 0bXXXX0000 (or whatever the prefix is for BITs)
lower_nibble = 0x0F & lowerByte; // Zero’s out upper bits, leaving 0b0000YYYY

combined = lower_nibble | upper_nibble; // ORs together for 0bXXXXYYYY