Misurare tempo con arduino

Salve a tutti, avrei bisogno di un codice che faccia eseguire il tempo impostato da un tasto (+1 minuto, -1 minuto) e che quando sia scaduto il tempo (es. 5 minuti) il codice si fermi, per poi magari farlo ripartire da un tasto.

In pratica ho 3 bottoni, uno per aumentare il tempo, uno per diminuire e uno per far riniziare il ciclo e che una volta impostato il tempo si accendino progressivamente 3 led, rosso all inizo poi giallo e poi verde quando è a fine, sarebbero le porte: rosso = 7, giallo = 8, verde = 7

inoltre vorrei che appunto il tempo sia impostato all’inizio, quindi nel setup se si può e dopodichè che parta il loop per quel tempo…non so se sono stato molto chiaro, ecco il codice (i tasti sono ancora da aggiungere nel codice e utilizzerei le porte analogiche come digitali, usando int x = 17, int z = 18, int y = 19, rispettivamente le porte A3 A4 e A5)

 int DP = A0;
int DD = A2;
int verde = 13;
int rosso = 9;

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

  lcd.begin(16, 2);
  Serial.begin(9600);
  pinMode(DP, INPUT);
  pinMode(DD, INPUT);
  pinMode(verde, OUTPUT);
  pinMode(rosso, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
    lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
  // read the input on analog pin 0:
  int sensorValue = analogRead(DP);
  int sensor2 = analogRead(DD);
  if (sensorValue == 0 && sensor2 == 0) {
    digitalWrite(rosso, HIGH);
    digitalWrite(verde, LOW);
  Serial.println("SPENTO");
  lcd.setCursor(0,0);
  lcd.print("OFF     ");

  } 
else if (sensorValue > 0 && sensor2 < 10) {
   Serial.println("ON: 5V");
 lcd.setCursor(0,0);
  lcd.print("ON: 5V");
      digitalWrite(rosso, LOW);
    digitalWrite(verde, HIGH);
}
   else if (sensor2 >0) {
     Serial.println("ON: 9V");
         digitalWrite(rosso, LOW);
    digitalWrite(verde, HIGH);
     lcd.setCursor(0,0);
  lcd.print("ON: 9V");
}


}