Cuando digitas un número qué ocurre?
char key = keypad.getKey(); // Captura una tecla del teclado.
if (key) Serial.println(key);
Esto lo entiendes?
Ahi dice... si se presionó algo imprímelo.
key cambia de 0 o sea nada presionado y por lo tanto false en el if a algo que corresponde al valor de la table con la que has diseñado tu teclado matricial.
Ahora presionas 1 fila 0 columa 0
ese 1 vale unidad si no presionas otro número
si presionas otro número ya deberia ser decena, o sea.. tenerlo almacenado, multiplicarlo por 10 y sumarlo al nuevo numero digitado.
y asi vas multiplicando x 10 la suma de dos numeros hasta cuando? Hasta que una tecla que puede ser por ejemplo # indique que se terminó el ingreso del número.
Por lo tanto tienes una secuencia repetitiva que empieza con una variable en 0, que lleva la suma
A ese valor lo multiplicas por 10 pero como es 0 seguira en 0, y le sumas lo ingresado.
Resultado para el primer digito tienes la unidad.
supongamos presionas 1 y valor que es tu variable = 0.
1er digito: Vas a presionar 1 x ejemplo
// en globales defino
int valor = 0;
int tecla;
// en tu loop
tecla = key - '0'; // convierto a key en número entero
valor = valor*10+tecla;
Entonces valor = 1
2do digito : Presionas 4 x ejemplo
valor = 1*10+4 = 10+4 = 14
ya tienes dos números guardados.
Eso se mantiene hasta que decidas terminarlo con un
if (key =='#') {
// presentas el valor o haces lo que gustes con valor
// pero tmb es el momento para ponerlo a 0 y dejarlo
// listo para próximo ingreso.
}