Нужно чтоб кнопка задавала время через которое весь цикл остановиться

Написал код для интервалометра на Ардуино, осталось 4 кнопки у dip переключателя, я хочу поставить на них выставление времени (30,60,90,120мин ну или что-то в этом роде), нужно чтоб когда это время прошло цикл полностью остановился, а не давал команду камере до талого, пока не разрядиться

int DIP5 = 0;
int DIP6 = 0;
int DIP7 = 0;
int DIP8 = 0;
int DIP9 = 0;
int DIP10 = 0;
int DIP11 = 0;
int DIP12 = 0;

void setup() {
  Serial.begin(9600);
  pinMode(3, OUTPUT); //Pin 3 triggers camera via optop-isolator
  pinMode(LED_BUILTIN, OUTPUT); //Output to LED for testing - optional

  pinMode(5, INPUT_PULLUP); // 1 СЕК
  pinMode(6, INPUT_PULLUP); // 2 СЕК
  pinMode(7, INPUT_PULLUP); // 3 СЕК
  pinMode(8, INPUT_PULLUP); // 4 СЕК
  pinMode(9, INPUT_PULLUP); // 5 second input 
  pinMode(10, INPUT_PULLUP); // 10 second input
  pinMode(11, INPUT_PULLUP); // 30 second input
  pinMode(12, INPUT_PULLUP); // 60 second input
}

// the loop function runs over and over again forever
void loop() {
  DIP5 = digitalRead(5);
  DIP6 = digitalRead(6);
  DIP7 = digitalRead(7);
  DIP8 = digitalRead(8);
  DIP9 = digitalRead(9);
  DIP10 = digitalRead(10);
  DIP11 = digitalRead(11);
  DIP12 = digitalRead(12);
 
 
  Serial.println(DIP5);
  Serial.println(DIP6);
  Serial.println(DIP7);
  Serial.println(DIP8);
  Serial.println(DIP9);
  Serial.println(DIP10);
  Serial.println(DIP11);
  Serial.println(DIP12);

  if (DIP5 == LOW || DIP6 == LOW || DIP7 == LOW || DIP8 == LOW || DIP9 == LOW || DIP10 == LOW || DIP11 == LOW || DIP12 == LOW){
    digitalWrite(3, HIGH);
    digitalWrite(LED_BUILTIN, HIGH);
    Serial.println("trigger active");
    delay(150);
    digitalWrite(3, LOW);
    Serial.println("trigger off");
    digitalWrite(LED_BUILTIN, LOW); //LED may be omitted if expedient (low light, etc)
  }
  if (DIP5 == LOW) delay(1000);
  if (DIP6 == LOW) delay(2000);
  if (DIP7 == LOW) delay(3000);
  if (DIP8 == LOW) delay(4000);
  if (DIP9 == LOW) delay(5000); //5 second delay
  if (DIP10 == LOW) delay(10000); //10 second delay
  if (DIP11 == LOW) delay(30000); //30 second delay
  if (DIP12 == LOW) delay(60000); //60 second delay
  
}
static uint32_t timer = 0;
if (millis() - timer >= 1800000) // 30 минут - 30min*60sec*1000
{
  // здесь останавливаете все, что нужно остановить
}

Зачем тогда в коде их восемь?

Если вам нужен выбор из 4х вариантов - для этого достаточно всего 2 переключателя.
Для начала стоило бы упрстить код до двух переключателей - глядишь и логику будет проще понять.

Пробовали запрограммировать такое поведение? - не вижу ничего подобного в коде.

.,…
int Delay = 0;
dip1 = digitalRead(5);
dip2 = digitalRead(6);
dip3 = digitalRead(7);
dip4 = digitalRead(8);
Delay = dip1 + dip2<<1 + dip3<<2 + dip4<<3;

идея такова, что dip1 - бит0, dip2 - бит1, dip2 - бит2, dip4 - бит3
0000
bit3, bit2, bit1, bit0

то есть если положиния кнопок (dip-переключателей) в положениии 1101
(dip4 - 1, dip3 - 1, dip2 - 0, dip1 - 1)
получаем в Delay
dip4<<3 == 1000 (binary) == 0x8 (НЕХ)
dip3<<2 == 0100 (binary) = 0x4 (НЕХ)
dip2<<1 == 0000 (binary) = 0x0 (НЕХ)
dip1 == 0001 (binary) = 0x1 (НЕХ)
‘<<’ - это побитовый сдвиг влево в Си
таким образом:
Delay = 0x8+0x4+0x0+0x1 = 8+4+0+1 = 13

if (Delay==13) TimeDelay = 100; // напрмер, если комбинация dip 1101 установить задержку 100 ms

delay(TimeDelay);

принцип побитовой обработки понятен?

.,…
И

Ну написано - ```

Млять, ну вы тупые чтоль в конец?
У меня внучка в три года, учит меня как в ютуб включать правильные мультики.

3 лайка