Projeto - Descontaminação por UVC (erro na programação)

Esse projeto conta com cinco lampadas UVC e o seus funcionameto é por um determinado tempo, porém optamos por um botão de pausa ultilizando a função attachInterrupt que desligaria as lampadas e pausariamos o tempo do millis, mas não deu certo como imaginamos. O codigo:

#define PAUSA 2
#define LIGAR 5
#define BUZZER 3
#define LAMP_ 4
#include <LiquidCrystal.h>

int status = 0;
int Ledson = 13;

LiquidCrystal lcd(12, 11, 10, 9, 8, 7, 6);

void setup(){
pinMode(BUZZER, OUTPUT);
pinMode(LAMP_, OUTPUT);
pinMode(LIGAR, INPUT);
pinMode(PAUSA, INPUT_PULLUP);

attachInterrupt(digitalPinToInterrupt(PAUSA), paused, RISING);

pinMode(Ledson, OUTPUT);
digitalWrite(Ledson, HIGH);
lcd.begin(16,2);
lcd.clear();

lcd.setCursor(0,0);
lcd.print("Tatual: ");

Serial.begin(9600);
}
unsigned long pausa(int tempo){
unsigned long Tatual = 0;
Tatual = millis();

while(millis() < Tatual + tempo){
}
}

void loop(){
timer();
paused();

}

void timer(){
if (digitalRead(LIGAR) == 1){
status = 1;
digitalWrite(LAMP_, HIGH);
}
switch(status){
case 0:
digitalWrite(LAMP_, LOW);
break;

case 1:
digitalWrite( 6, LOW);
pausa(10000);
digitalWrite(LAMP_, LOW);

tone(BUZZER, 1500, 100);
status = 0;
break;
}
}
void paused(){
digitalWrite(LAMP_, LOW);
status = 0;
}

A questão seria, como que eu conseguiria pausar o tempo do case1 sem projudica um futuro ciclo da sketch. Me ajudem

unsigned long pausa(int tempo){
unsigned long Tatual = 0;
  Tatual = millis();
   
   
    while(millis() < Tatual + tempo){
    }
}

You promised the compiler you’d return a value, but didn’t.
Why not simply use delay()?

Please remember to use code tags when posting code

Não compilei, mas acho que é isto que pretendes:

#define PAUSA            2
#define LIGAR            5
#define BUZZER         3
#define LAMP_           4
#include <LiquidCrystal.h>

int status = 0;
int Ledson = 13; //este pino não é ideal para quando ligares os LEDs a sério. 

LiquidCrystal lcd(12, 11, 10, 9, 8, 7, 6);

void setup(){
  pinMode(BUZZER, OUTPUT);
  pinMode(LAMP_, OUTPUT);
  pinMode(LIGAR, INPUT);
  pinMode(PAUSA, INPUT_PULLUP);
 
  //attachInterrupt(digitalPinToInterrupt(PAUSA), paused, RISING);//não é preciso.
 
  pinMode(Ledson, OUTPUT);
  digitalWrite(Ledson, HIGH); 
  lcd.begin(16,2);
  lcd.clear();
 
  lcd.setCursor(0,0);     
  lcd.print("Tatual: ");
 
  Serial.begin(9600);
}

unsigned char estado = 0; 
unsigned long tempo = 0; 
unsigned long Tpausa = 10000;

void loop(){

  switch (estado) {
   case 0: 
      if (digitalRead(LIGAR) == HIGH){ //assumi que tens um pull down 
        tempo = millis(); 
        Tpausa = 10000;
        digitalWrite(Ledson, HIGH);
        estado = 1; //temporização a correr.
      } 
      break;
  case 1: a temporizar. 
    if (millis() - tempo >= Tpausa) { //o tempo chegou ao fim.
      estado = 3; 
    }
   if (digitalRead(PAUSA) == LOW) {//Alguém carregou na pausa. 
      Tpausa = Tpausa-(millis() - tempo); //tempo que falta para terminar
      digitalWrite(Ledson, LOW); //desliga o LED.
      estado = 2; 
   }
   break;
  case 2: //pausado
    if (digitalRead(LIGAR) == HIGH) { //vamos terminar o tempo que falta.
      tempo = millis(); 
      digitalWrite(Ledson, HIGH); 
      estado = 1; 
    }
    break;
  case 3: //terminou
      digitalWrite(Ledson, LOW); 
      tone(BUZZER, 1500, 100, 500);
    break;
  }//end switch case. 
}//end loop

Assumi que para resumir a temporização alguém carregaria no botão de ligar novamente. Dito isto, podias fazer tudo apenas com um botão.