Pequeño problema con la matriz de pulsadores con Arduino

Hola comunidad de Arduino, hoy tengo una duda con respecto a la matriz de pulsadores. Tengo entendido que esta ayuda a que no se usen muchos pines del Arduino (algo muy positivo ya que me permitirá usar 8 pines con 16 pulsadores) además esta funciona similar a una teclado de una pc, pero al momento de usar un pulsador solo envía un solo carácter. Lo que deseo realizar y por lo cual recurro al foro es que al mantener presionado un pulsador se repita este como si fuera un teclado convencional.

Ejemplo cuando presiono un pulsador y lo mantengo presionado:
presiono el botón en la posición 1x2, el resultado es 'a'.
Mantengo presionado el botón de la posición 1x2, el resultado es 'a'. (Por mas que lo mantenga presionado).
lo que deseo es:
Mantengo presionado el botón de la posición 1x2, el resultado es 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' hasta dejar de pulsarlo, para de escribir caracteres.

Aquí adjunto el código que llevo:

#include <Keypad.h>
                        
const byte filas = 2;
const byte columnas = 2;

byte pinesFilas[] = {2, 3};
byte pinesColumnas[] = {4, 5};

char teclas[2][2] = {{'a', 'b'},
                     {'c', 'd'}};
Keypad teclado1 = Keypad (makeKeymap (teclas), pinesFilas, pinesColumnas, filas, columnas);
int i=0;
void setup(){
  Serial.begin(9600);                             
}

void loop(){

  char tecla_presionada = teclado1.getKey();

  /*if(tecla_presionada){
    Serial.print("Tecla: ");
    Serial.println(tecla_presionada);
  }*/
  
  if(tecla_presionada == 'a'){
    Serial.print("Tecla: ");
    Serial.println(tecla_presionada);
  }
  else if(tecla_presionada == 'b'){
    Serial.print("Tecla: ");
    Serial.println(tecla_presionada);
  }
  else if(tecla_presionada == 'c'){
    Serial.print("Tecla: ");
    Serial.println(tecla_presionada);
  }
  else if(tecla_presionada == 'd'){
    Serial.print("Tecla: ");
    Serial.println(tecla_presionada);
  }else{
    Serial.print("Tecla: ");
    Serial.println(tecla_presionada);
  }

}

Moderador:
Por favor, lee las Normas del foro y postea tu código siempre para complementar tu comentario.

Hola Surbyte, Puedo editar la publicación inicial? o debo eliminarlo y volver a crear uno nuevo?

La librería no funciona asi.
Cuando presioas algo tecla_presionada se carga con dicho valor.
Cuando dejas de presionar tecla_presionada = 0;
Lo único que puedes hacer esto

#include <Keypad.h>

const byte filas = 2;
const byte columnas = 2;
char tecla_presionada, tecla;

byte pinesFilas[] = {2, 3};
byte pinesColumnas[] = {4, 5};

char teclas[2][2] = {{'a', 'b'},
  {'c', 'd'}
};
Keypad teclado1 = Keypad (makeKeymap (teclas), pinesFilas, pinesColumnas, filas, columnas);
int i = 0;
void setup() {
  Serial.begin(9600);
}

void loop() {

  
  tecla_presionada = teclado1.getKey();
  if (tecla_presionada != 0) 
      tecla = tecla_presionada;
  else 
      tecla = 0;

  if (tecla == 'a') {
    Serial.print("Tecla: ");
    Serial.println(tecla);
  }
  else if (tecla == 'b') {
    Serial.print("Tecla: ");
    Serial.println(tecla);
  }
  else if (tecla == 'c') {
    Serial.print("Tecla: ");
    Serial.println(tecla);
  }
  else if (tecla == 'd') {
    Serial.print("Tecla: ");
    Serial.println(tecla);
  } else {
    Serial.print("Tecla: ");
    Serial.println(Tecla);
  }

}

Ok, Surbyte entiendo lo que me acabas de decir lo puse en practica paro aun sigue igual que antes. ¿Qué otra librería me recomendarías para llegar a mi resultado deseado?

Estuve mirando un código sin librería, y la verdad es mucho mas largo que con librería, pero este funciona exactamente de la misma manera que el anterior.

byte pinesFilas[] = {2, 3}; 
byte pinesColumnas[] = {4, 5}; 
char teclas[4][4] = {{'a','b'}, 
                     {'c','d'}};
void setup()
{
  for (int nL = 0; nL <= 1; nL++) {
     pinMode(pinesFilas[nL], OUTPUT);
     digitalWrite(pinesFilas[nL], HIGH);
  }
  for (int nC = 0; nC <= 1; nC++) {
     pinMode(pinesColumnas[nC], INPUT_PULLUP);
  } 
   
  Serial.begin(9600);
  
}
 
void loop()
{
    //Barrido por las filas
    for (int nL = 0; nL <= 1; nL++)
    {
      digitalWrite(pinesFilas[nL], LOW);
      
      //Barrido en columnas buscando un LOW
      for (int nC = 0; nC <= 1; nC++) {
        if (digitalRead(pinesColumnas[nC]) == LOW)
        {
          Serial.print("Tecla: ");
          Serial.println(teclas[nL][nC]);
          while(digitalRead(pinesColumnas[nC]) == LOW){}
        }
      }
      digitalWrite(pinesFilas[nL], HIGH);
    }
   delay(10);
}

El código lo saque de la siguiente fuente: