Temporizador con lcd+ l298n con motor a pasos

Necesito ayuda en como poder cambiar los botones por un teclado matricial y hacer que cuando inicie el tempo active un motor a pasos conectado a un l298n y al terminar el tiempo lo regrese.

El codigo es un temporizador y con botones puedes poner el tiempo que quieras

Este es el codigo:

#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 


byte horas, minutos, segundos;

byte pinBuz = 13;
byte pinSta = A1;
byte pinHor = A5;
byte pinMin = A4;
byte pinSeg = A3;

boolean SSS; //start Stop State
byte seguro;

unsigned long lastMillis;

byte frownie[8] = {
  0b00000,
  0b00000,
  0b01010,
  0b00000,
  0b00000,
  0b00000,
  0b01110,
  0b10001
};

byte armsDown[8] = {
  0b00100,
  0b01010,
  0b00100,
  0b00100,
  0b01110,
  0b10101,
  0b00100,
  0b01010
};

byte armsUp[8] = {
  0b00100,
  0b01010,
  0b00100,
  0b10101,
  0b01110,
  0b00100,
  0b00100,
  0b01010
};

void setup() {

 lcd.createChar(2, frownie);

 lcd.createChar(3, armsDown);

 lcd.createChar(4, armsUp);

 pinMode(pinBuz, OUTPUT);              
 pinMode(pinSta, INPUT_PULLUP);       
 pinMode(pinHor, INPUT_PULLUP);       
 pinMode(pinMin, INPUT_PULLUP);      
 pinMode(pinSeg, INPUT_PULLUP);       
 startLCD();
}

void loop() {

 do {
   manage_SSS(); 
   //--------RUTINA ESCOGER EL TIEMPO EN PANTALLA.
   lcd.home();    
   lcd.print("Elige el tiempo");
   printTime();   

   //--------RUTINA BOTONES DE TIEMPO.
   if (digitalRead(pinHor) == LOW)
   { delay(200);                       
     horas++;
     if (horas > 99) horas = 0;         
   }

   if (digitalRead(pinMin) == LOW)
   { delay(200);                        
     minutos++;
     if (minutos > 60) minutos = 0;     
   }

   if (digitalRead(pinSeg) == LOW)
   { delay(200);                         
     segundos++;
     if (segundos > 60) segundos = 0;   
   }

 }
 while (!SSS); 

 while (SSS) //<----inicia whie // SSS = TRUE
 { manage_SSS();//<----función que activa y libera el ciclo do y el ciclo while
   lcd.home();
   lcd.print("Tiempo restante");
   //    printTime();  
   //A PARTIR DE AQUÍ INICIA EL CALCULO DEL TIEMPO RESTANTE, CADA 1000 MS
   if (millis() - lastMillis >= 1000)
   {
     lastMillis = millis();
     
     if (segundos > 0 ) segundos--;    
     if (segundos == 0 && minutos > 0) 
     {
       minutos--;                       
       segundos = 59;                 
     }
     if (minutos == 0 && horas > 0)    
     {
       horas--;                         
       minutos = 59;                   
     }
   } //TERMINA EL CALCULO DEL TIEMPO RESTANTE
     //EMPIEZA LA RUTINA "TIEMPO FINALIZADO"
     if (horas == 0 && minutos == 0 && segundos == 0) //<----  ¿no hay tiempo?.
     {
       lcd.clear();
       lcd.setCursor(5, 0);
       lcd.print("Tiempo");
       lcd.setCursor(3, 1);
       lcd.print("Finalizado");


       digitalWrite(pinBuz, HIGH);
       delay(200);
       digitalWrite(pinBuz, LOW);
       delay(200);
     }else printTime();  
   }
 }

 void manage_SSS() { //función que cambia el estado de SSS, y evita atascos
   //se ejecuta en ambos ciclos, para poder salir de ambos.
   if (digitalRead(pinSta) == LOW && seguro == 0)
   {lcd.clear();        //agrego un clear porque cuando termina el tiempo queda F00:00:00o
     SSS = !SSS;        
     seguro++;         
   }                    

   if (digitalRead(pinSta) == HIGH) seguro = 0;
   //cuando pinSta sea liberado cambiara su estado a HIGH y seguro = 0
   //con esto posibilitamos que la condición anterior se pueda ejecutar nuevamente
   // y por una vez cuando sea presionado nuevamente (pinSta = LOW)
   //no necesita delay pues el seguro entra inmediato

 }

 void printTime() {
   // función simple que imprime el tiempo en la segunda linea
   // con esto evitamos repetir código en el ciclo do y en el ciclo while
   lcd.setCursor(4, 1);
   if (horas < 10)lcd.print("0");
   lcd.print(horas);
   lcd.print(":");
   if (minutos < 10)lcd.print("0");
   lcd.print(minutos);
   lcd.print(":");
   if (segundos < 10)lcd.print("0");
   lcd.print(segundos);
 }

 void startLCD() {
   // + + + + + + + + + + + + + + + + + + + + + //
   //  ---- Rutina de inicio Splash Screen ---- //
   // + + + + + + + + + + + + + + + + + + + + + //
   lcd.begin(16, 2);
   byte customChar1[8] = {
     B00000,
     B00100,
     B01110,
     B11111,
     B01110,
     B00100,
     B00000,
     B00000
   };
   byte customChar2[8] = {
     B00000,
     B00100,
     B01010,
     B10101,
     B01010,
     B00100,
     B00000,
     B00000
   };

   lcd.createChar(0, customChar1);
   lcd.createChar(1, customChar2);

   // --- inicia rutina --- //


   lcd.setCursor(0, 0);
   lcd.print("ACTIVACION");
   lcd.setCursor(0, 1);
   lcd.write(byte(0));
   lcd.setCursor(1, 1);
   lcd.print("--------------");
   lcd.setCursor(15, 1);
   lcd.write(byte(1));
   delay(2500);
   lcd.clear();

   lcd.setCursor(2, 0);
   lcd.print("Temporizador");
   lcd.setCursor(6, 1);
   int sensorReading = analogRead(A0);
   int delayTime = map(sensorReading, 0, 1023, 200, 1000);
   lcd.setCursor(4, 1);
   lcd.write(3);
   delay(delayTime);
   lcd.setCursor(4, 1);
   lcd.write(4);
   delay(delayTime);
    lcd.print("TTT");
    delay(2500);
    lcd.clear();
 }

Moderador: Titulo editado

No he respondido porque no entendí lo que se pretende hacer.