Problemas con temporizador

Hola buenas, tengo hecho un temporizador al que le tengo puesto cuatro botones, tres para que baje la cuenta dependiendo de si queremos horas, minutos o segundos y otro para aumentar ese valor, y quisiera hacer que al comenzar el tiempo un motor gire ydespues de finalizar ese tiempo el motor pare, he buscado en internet algun temporizador pero todos estaban sin módulo I2C y ocupaban muchos pines, y no comprendía nada. Uso un arduino UNO, un lcd de 16x2 y un led que se enciende cuando sube los valores.
He intentado yo mismo hacer funcionar el motor paso a paso que tenía con el arduino, y cuando bajaba los segundos se iba parando, creo que es por la función delay, pero no se como hacer que espere ese tiempo de otra forma, también cuando el contador llegaba a 0, el motor se ponía a funcionar sin parar y ya no me dejaba subir el contador.
La idea es que me haga funcionar un motor un determinado tiempo y que este tiempo pueda establecerlo con los botones y el lcd, espero que me ayuden, gracias.

El código sería este:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2);


const int botonPin = 2; //el pin del boton es el 13
const int ledPin = 13; //el pin del led es el 2
const int botonRegresivoSegundos = 4;   //este boton iniciará la cuenta atrás, conectado al pin 4
const int botonRegresivoMinutos = 5;
const int botonRegresivoHoras = 6;


int presionBoton = 0; //el valor del boton es 0
int valor = 0;   //el valor de cuenta es 0
int contador = 0;  //el valor del contador es de 0
int botonSegundos = 0;  //boton que cuenta hacia abajo en segundos
int botonMinutos = 0;
int botonHoras = 0;
int generico = 0;

void setup() {
  pinMode(ledPin, OUTPUT);    //el pin del led es de salida
  pinMode(botonPin, INPUT);   //el pin del boton es de entrada
  pinMode(valor, OUTPUT);   //el valor es salida
  pinMode(contador, OUTPUT);  //el contador es de salida
  pinMode(botonRegresivoSegundos, INPUT); //el boton de marcha atrás en segundos es de entrada
  pinMode(botonRegresivoMinutos, INPUT); //el boton de marcha atrás en minutos es de entrada
  pinMode(botonRegresivoHoras, INPUT); //el boton de marcha atrás en horas es de entrada
  
  lcd.init();   //iniciar lcd
  lcd.backlight();  //inicia luz de detrás del lcd
  
}

void loop() {
  presionBoton = digitalRead(botonPin);   //el valor de la presion del boton, es la lectura del pin del boton
  valor = digitalRead(contador);
  botonSegundos = digitalRead(botonRegresivoSegundos);
  botonMinutos = digitalRead(botonRegresivoMinutos);
  botonHoras = digitalRead(botonRegresivoHoras);

  
  if (presionBoton == HIGH){    //si la lectura del pin del boton hace que el valor de su presion sea 1 o high enciende el led de la linea posterior
    
    digitalWrite(ledPin, HIGH);
    if(contador == contador){
      contador = contador + 1;
    }
    lcd.clear();
    delay(50);
    lcd.print(contador);   //escribe en el lcd el valor de la cuenta
       delay(50);
  }else{
  digitalWrite(ledPin, LOW);
  lcd.clear();
  lcd.print(contador);
  }
  if (botonSegundos == HIGH){
    generico = 1;
    
  }
  if (generico == 1){
    contador = contador - 1;
    delay(50);
  lcd.clear();
  delay(500);
  lcd.print(contador);
  delay(500);
  }

  if (contador == 0){
    generico = 0;
         
}else{
 digitalWrite(ledPin, LOW);
  lcd.clear();
  lcd.print(contador);
  }
  
  if (botonMinutos == HIGH){
    generico = 2;
  }
  if (generico == 2){
    contador = contador - 1;
  delay(60000);
  lcd.clear();
  lcd.print(contador);
   }
  
else{
 digitalWrite(ledPin, LOW);
  lcd.clear();
  lcd.print(contador);
  }
if (botonHoras == HIGH){
   generico = 3;
  }
if (generico == 3){
   contador = contador - 1;
  delay(3600000);
  lcd.clear();
  lcd.print(contador);
 }
else{
 digitalWrite(ledPin, LOW);
  lcd.clear();
  lcd.print(contador);
  }

}