Crónometro más contador con sensores inductivos y LCD

Buenas tardes @Surbyte.

Tal y como me comentaste, buscando ejemplos he conseguido hacer gran parte de lo que necesito.

Ya tengo funcionando que se inicie el cronometro y sume una unidad el contador con un sensor y que se pare cuando detecta el otro y mostrarlo todo por el display.

Ahora tengo problema al intentar hacer la resta del contador con un botón y el reset de todo con otro. Al pulsar los botones no hace nada de nada.

El código del programa és el siguiente y el código de los botones está al final del todo:

  // Importar librerías
  #include <Wire.h>
  #include <LiquidCrystal_I2C.h>
  LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  
  // Variables para los cálculos internos del cronómetro
  int horas = 0;
  int minutos = 0;
  int segundos = 0;
  int decimas = 0;
  int contador = 0;
  long milisegundos = 0;

  int boton_resta = 7; // restar unidades contador
  int boton_reset = 8; // resetear contador y cronometro
  int sensor_inicio = 9; // pulsador_inicio en PIN digital 10
  int sensor_fin = 10; // pulsador_pausa en PIN digital 9

  
  void setup()
  {
    Serial.begin(9600); // Comienzo de la comunicación serie
    pinMode(sensor_inicio, INPUT_PULLUP); // Pin digital 10 como entrada  
    pinMode(sensor_fin, INPUT_PULLUP); // Pin digital 9 como entrada
    pinMode(boton_reset, INPUT); // Pin digital 8 como entrada
    pinMode(boton_resta, INPUT); // Pin digital 7 como entrada
    
    // Inicializamos el LCD
    lcd.begin(16,2);
    lcd.backlight();
  }
  void(* resetFunc) (void) = 0;//declare reset function at address 0
  
  void loop()
  {
    // Si presionamos el pulsador de inicio se pone todo a cero, se reinicia em cronómetro y se suma una unidad al contador
    if(digitalRead(sensor_inicio) == HIGH)
    {
      horas = 0;
      minutos = 0;
      segundos = 0;
      decimas = 0;
      lcd.clear();

      // Se suma una unidad al contador
      contador++;
      
      // Se muestra el contador por el LCD
      lcd.setCursor(3,1);
      lcd.print("CONTADOR:");
      lcd.print( contador);
      
      
      while(digitalRead(sensor_fin) == LOW)
      {

       // Se cuentan los milisegundos transcurridos
    milisegundos = millis();
    
    // Si el tiempo transcurrido es mayor a una décima de segundo 
    if(milisegundos % 100 == 0)
    {
      decimas++;
      // Si han pasado 10 décimas de segundo se cuenta un segundo
      if(decimas == 10)
      { 
        decimas = 0;
        segundos++;
      }
      // Si han pasado 60 segundos se cuenta un minuto
      if(segundos == 60)
      { 
        segundos = 0;
        minutos++;
      }
      // Si han pasado 60 minutos se cuenta una hora
      if(minutos == 60)
      {
        minutos = 0;
        horas++;
      }
      
      // Mostramos el tiempo a través del LCD
      lcd.setCursor(4,0);
      if(horas < 10)
      {
        lcd.print("0");
      }
      lcd.print(horas);
      lcd.print(":");
      lcd.setCursor(7,0);
      if(minutos < 10)
      {
        lcd.print("0");
      }
      lcd.print(minutos);
      lcd.print(":");
      lcd.setCursor(10,0);
      if(segundos < 10)
      {
        lcd.print("0");
      }
      lcd.print(segundos);
      
    }
    }    
    }
    
    // Si se detecta el sensor de fin, se para el tiempo.
    if(digitalRead(sensor_fin) == HIGH)
    {
      delay(200);
      while(digitalRead(sensor_inicio) == LOW);
      delay(200);
      
    }
    if(digitalRead(boton_reset) == LOW)
    {
      resetFunc();
     
    }
      if(digitalRead(boton_resta) == LOW)
    {
      contador --;
    }
   
  }

Cualquier ayuda o aclaración es bien recibida. Gracias.