Aiuto con millis

Grazie ad entrambi per la risposta.

@ORSO2001, la parte logica della programmazione l'avevo abbastanza chiara in mente, il mio problema è che scrivendo il codice poi non faceva quello che volevo; Probabilmente pechè ho usato sia per la void allarm() che per quella snooz le stesse variabili previousMillis e currentMillis ad esclusione di noteDuration e snoozeDuration.
Scritto così se premo un tasto il buzzer si silenzia solo per qualche secondo a prescindere del tempo impostato a snoozeDuration e, non ne capisco il motivo! Con il delay invece tutto funziona correttamente però poi si ibena tutto e non mi va bene.

const int buzzer = D7; //buzzer to arduino pin D7
bool AllertBuzzer = true;
String Allert;
bool StoredAllert;
unsigned long previousMillis = 0;
const long snoozeDuration = 300000;
const long pauseBetweenNotes = 1000;
const long noteDuration = 1000;
boolean outputTone = false;                // Records current state



void snooze()
{
  unsigned long currentMillis = millis();
  int Value = analogRead(0);
  int Btn = 0;
  if ((Value > 5) &&  (Value < 20)) (Btn = 1); //enter
  if ((Value > 240) &&  (Value < 300)) (Btn = 2); //up
  if ((Value > 400) &&  (Value < 450)) (Btn = 3); //down
  if ((Value > 500) &&  (Value < 600)) (Btn = 4); //back

  if  ((Btn >= 1) && (Btn <= 3))
  {

    if (currentMillis - previousMillis < snoozeDuration)
    {
      previousMillis = currentMillis;

      noTone(buzzer);
      Serial.println ("BUTTON PRESSED - ALLARM SNOOZED");
      Serial.print ("Value= ");
      Serial.println(Value);
      Serial.print("Delta Millis: ");
      Serial.println(currentMillis - previousMillis);
      delay(30000);
    }

  }
  /*
    else if (Btn = 4)
    {
    noTone(buzzer);
    Serial.println ("BUTTON PRESSED - ALLARM STOPPED");
    Serial.print ("Value= ");
    Serial.println(Value);
    }
  */
}


void allarm()
{
  snooze();
  unsigned long currentMillis = millis();
  if (outputTone) {
    // We are currently outputting a tone
    // Check if it's been long enough and turn off if so
    if (currentMillis - previousMillis >= noteDuration)
    {
      previousMillis = currentMillis;
      noTone(buzzer);
      outputTone = false;
    }
  }
  else {
    // We are currently in a pause
    // Check if it's been long enough and turn on if so
    if (currentMillis - previousMillis >= pauseBetweenNotes)
    {
      previousMillis = currentMillis;
      tone(buzzer, 1000);
      outputTone = true;
    }
  }
}