Use buttons during delay

I am quite new to Arduino and I am working on a time bomb to use in airsoft. As a test, before buying things like an LCD, horn speaker, etc. I am making this small version with the buzzer and buttons included in the starter kit.

I got it working completely, one button adds 60 seconds to the timer, one button adds 1 second to the timer. Another button starts the timer, another button defuses it and also resets the timer to 0.

To make the timer count down I use a delay(500) twice (with the buzzer beeping inbetween). But because of this delay, I need to hold the reset/defuse button 1 second before it reads the input.

So my question is:

How do I take input from different buttons while the timer is active?

compy111: I am quite new to Arduino and I am working on a time bomb to use in airsoft. As a test, before buying things like an LCD, horn speaker, etc. I am making this small version with the buzzer and buttons included in the starter kit.

I got it working completely, one button adds 60 seconds to the timer, one button adds 1 second to the timer. Another button starts the timer, another button defuses it and also resets the timer to 0.

To make the timer count down I use a delay(500) twice (with the buzzer beeping inbetween). But because of this delay, I need to hold the reset/defuse button 1 second before it reads the input.

So my question is:

How do I take input from different buttons while the timer is active?

A way to do delay without your code wait is in this link https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

Nixtas has the idea, but in your case, you want to use that code example to 'Read button without delay()' Exactly the same principal - check your button state into a 'flag' where the LED action occurs, and act on that state elsewhere when needed.

Ok, so now I am using the Millis() function to set the time, the timer works, after one minute the bomb goes off. The reset button works perfectly now. But instead of bleeping before the bomb goes off, it gives one continuous bleep. What am I doing wrong, that makes the buzzer not go off between the bleeps.

Part of the code:

//Activate boom function when timer is reached.
  if ((curMil >= startMil + timer*1000) && (active == 1)) { 
    timer = 0;
    active = 0;
    boom();
  }

//When the last bleep is 1s ago, start buzzer.
  if ((active == 1) && (prevBleep - curMil >= 1000)) {
    prevBleep = curMil;
    tone(buzzPin, 200);
  }

//When the buzzer started 0.5s ago, stop the buzzer.
  if (prevBleep - curMil >= 500) {
    noTone(buzzPin);
  }

nvm, stupid me switched up the prevBleep - curMil

had to be curMil - prevBleep...