Как заблокировать вход кнопки с возможностью выбора задержки?

У меня есть программа, над которой я работаю, в которой реле включается -> ждет задержки -> затем выключается после того, как происходит одно из двух: 1) достигается заданное время r ИЛИ 2) кто-то нажимает кнопку, чтобы активировать его.

Сейчас 90% моего кода работает, и я застрял на том, как «заблокировать» кнопку, чтобы она не срабатывала при срабатывании реле, на выбираемое время задержки.

Часть кода с таймером, с выбираемым временем, работает. В зависимости от того, что видит аналоговый 1, он соответствующим образом включит реле после выбранного времени.

Я попытался реализовать этот же подход для таймера блокировки, используя аналоговый 2, чтобы определить длительность задержки. Я использовал переменную, которую назвал LOK, чтобы либо прочитать кнопку, если она разблокирована (LOK = 0), либо, если она заблокирована (LOK = 1), подождать отведенное время задержки перед разблокировкой и повторным считыванием кнопки.

Я перепробовал все виды вещей, но это все еще не работает правильно. Возможно, есть лучший или более простой способ сделать это, но я сломал голову, и поиск по ключевым словам не помогает.

Код ниже - простите за случайные комментарии. Я что-то резал и перемещал, я не редактировал комментарии, поэтому некоторые из них могут быть из других фрагментов кодов из других проектов.

int DUMP = 2; // Контакт подключен к большому реле дампа
int BUTTON = 3; // Контакт подключен к кнопке ручного сброса.
int BUTTONlight = 4; // Контакт подключен к кнопочной подсветке.


int BUTstate; // Текущее показание с контакта BUTTON
int lastBUTstate = LOW; // Предыдущее чтение с контакта BUTTON

long lastDebounce = 0; // Последний раз вывод был изменен
long Delay = 50; // Время дребезга

unsigned long DUMPTIME;
unsigned long LOT;

unsigned long prevTIME;

int a=0;
int d=0;

int LOK = 0;

void setup()
{ 
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);

  pinMode (BUTTON, INPUT);
  pinMode (BUTTONlight, OUTPUT);
  pinMode (DUMP, OUTPUT);

  digitalWrite(DUMP, HIGH);
  delay(10000);
  digitalWrite(DUMP, LOW);
  digitalWrite(BUTTONlight, HIGH);
}

int readTselector(int pin)
// возвращает номер нажатой кнопки или ноль, если кнопка не нажата
// int pin — номер аналогового контакта для считывания
{
  int b,c = 1;
  c=analogRead(pin); // получить аналоговое значение
  if (c>1000)
  {
    b=0; // кнопки не были нажаты
  }   
  else
    if (c<1000 && c>600)
    {
      b=1; // кнопка 1 нажата
    }     
    else
      if (c<520 && c>400)
      {
        b=2; // кнопка 2 нажата
      }       
      else
        if (c>100 && c<400)
        {
          b=3; // кнопка 3 нажата
        }         
        else
          if (c<100)
          {
            b=4; // кнопка 4 нажата
          }           
  return b; 
  }


void loop()
{
  int DUMPTIME = DTselect();
  int LOT = LOselect();

  int reading = digitalRead(BUTTON);

  unsigned long currTIME = millis();

  if ((currTIME - prevTIME) >= DUMPTIME) // Считаем до 2 минут
   {
     LOK = 1;
     digitalWrite(BUTTONlight, LOW);
     digitalWrite(DUMP, HIGH);
     delay(10000);
     digitalWrite(DUMP, LOW);
     prevTIME = currTIME;
   }

  if (reading != lastBUTstate)
  {
    lastDebounce = millis();
  }


  if (LOK == 1)
  {
    delay(LOT);
    digitalWrite(BUTTONlight, HIGH);
    LOK = 0;

  }
  if ((millis() - lastDebounce) > Delay && LOK == 0)
  {
    BUTstate = reading;
  }

  if (BUTstate == HIGH)
  {
    digitalWrite(BUTTONlight, LOW);
    digitalWrite(DUMP, HIGH);
    delay(10000);
    digitalWrite(DUMP, LOW);
    prevTIME = currTIME;
  }
  lastBUTstate = reading;
}

int DTselect()
{
  a=readTselector(1); 
  if (a==0) // кнопки не нажаты
  {
    DUMPTIME = 210000;
  }   
  else
    if (a==1) // кто-то нажал кнопку!
    {
      DUMPTIME = 180000;
    }
    else
     if (a==2) // кто-то нажал кнопку!
     {
       DUMPTIME = 150000;
     }
     else
      if (a==3) // кто-то нажал кнопку!
      {
        DUMPTIME = 120000;
      }
     else
       if (a==4) // кто-то нажал кнопку!
       {
         DUMPTIME = 90000;
       }
  return DUMPTIME; 
 }

int LOselect()
{
  d=readTselector(2); 
  if (d==0) // кнопки не нажаты
  {
    delay(20000);
  }   
  else
    if (d==1) // кто-то нажал кнопку!
    {
      delay(15000);
    }
    else
     if (d==2) // кто-то нажал кнопку!
     {
       delay(10000);
     }
     else
      if (d==3) // кто-то нажал кнопку!
      {
        delay(5000);
      }
      else
       if (d==4) // кто-то нажал кнопку!
       {
         delay(0);
       }
 }

, 👍2