BOTON PAUSA -->INICIO PROCESO

Buen día, Estoy programando una serie de procesos a seguir, pero al termino del primer proceso, tengo que hacer una pausa en el programa, y reiniciarlo al presionar un botón, el código está sin optimizar;se los dejo a continuación. Al termino de este tengo que agregar la pausa.

Estoy utilizando un arduino mega 2560.
Tengo problema ademas al agregar un buzzer, al final de cada sub-proceso.

#include <NewPing.h>
#include <Time.h>
#include <TimeLib.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>

volatile int NumPulsos; //variable para la cantidad de pulsos recibidos
int PinSensor = 2;    //Sensor conectado en el pin 2
float factor_conversion = 7.5; //para convertir de frecuencia a caudal
float volumen = 0;
long dt = 0; //variación de tiempo por cada bucle
long t0 = 0; //millis() del bucle anterior
int Rele1 = 4; //BOMBA
int Rele2 = 5; //VALvULA GAS
int Rele3 = 6; //AGITADOR
int Rele4 = 7; //VALvULA LLENEDO
int Rele5 = 8; //VALvULA FILTRO
int Rele6 = 9; //VALvULA INTERCAMBIADOR DE CALOR
int Rele7 = 10; //VALvULA BOMBA
int Rele8 = 11; //VALVULA AGUA INT. DE CALOR
int Rele9 = 22;
int Rele10 = 23;
int Rele11 = 24;
int Rele12 = 25;
//INDICADORES
int led_azul = 40;
int led_llenado = 41;
int led_macerado = 42;
int led_vaciado = 43;
int const BUZZER = 50;
//ENTRADAS
// VARIABLES PARA CALCULOS
const int pinecho = 12;
const int pintrigger = 13;
unsigned int tiempo, distancia, altura;


//---Función que se ejecuta en interrupción---------------
float frecuencia, caudal_L_m, temp;
void ContarPulsos ()
{
  NumPulsos++;  //incrementamos la variable de pulsos
}

//---Función para obtener frecuencia de los pulsos--------
int ObtenerFrecuecia()
{
  int frecuencia;
  NumPulsos = 0;   //Ponemos a 0 el número de pulsos
  interrupts();    //Habilitamos las interrupciones
  delay(100);   //muestra de 1 segundo
  noInterrupts(); //Deshabilitamos  las interrupciones
  frecuencia = NumPulsos; //Hz(pulsos por segundo)
  return frecuencia;
}
OneWire ourWire(3);                //Se establece el pin 3  como bus OneWire
DallasTemperature sensors(&ourWire); //Se declara una variable u objeto para nuestro sensor
LiquidCrystal_I2C lcd (0x27, 16, 2);

void setup()
{

  Serial.begin(9600);
  pinMode(BUZZER, OUTPUT);
  pinMode(Rele1, OUTPUT);
  pinMode(Rele2, OUTPUT);
  pinMode(Rele3, OUTPUT);
  pinMode(Rele4, OUTPUT);
  pinMode(Rele5, OUTPUT);
  pinMode(Rele6, OUTPUT);
  pinMode(Rele7, OUTPUT);
  pinMode(Rele8, OUTPUT);
  pinMode(Rele9, OUTPUT);
  pinMode(Rele10, OUTPUT);
  pinMode(Rele11, OUTPUT);
  pinMode(Rele12, OUTPUT);
  pinMode(led_azul, OUTPUT);
  pinMode(led_llenado, OUTPUT);
  pinMode(led_macerado, OUTPUT);
  pinMode(led_vaciado, OUTPUT);
  pinMode(pintrigger, OUTPUT);
  pinMode(pinecho, INPUT);
  pinMode(PinSensor, INPUT);
  digitalWrite(Rele1, HIGH);
  digitalWrite(Rele2, HIGH);
  digitalWrite(Rele3, HIGH);
  digitalWrite(Rele4, LOW);
  digitalWrite(Rele5, HIGH);
  digitalWrite(Rele6, HIGH);
  digitalWrite(Rele7, HIGH);
  digitalWrite(Rele8, HIGH);
  digitalWrite(Rele9, HIGH);
  digitalWrite(Rele10, HIGH);
  digitalWrite(Rele11, HIGH);
  digitalWrite(Rele12, HIGH);
  digitalWrite(led_azul, LOW);
  digitalWrite(led_llenado, LOW);
  digitalWrite(led_macerado, LOW);
  digitalWrite(led_vaciado, LOW);

  attachInterrupt(0, ContarPulsos, RISING); //(Interrupción 0(Pin2),función,Flanco de subida)
  Serial.println ("Envie 'r' para restablecer el volumen a 0 Litros");
  t0 = millis();
  Wire.begin();
  lcd.begin(16, 2 );
  lcd.clear();
  lcd.backlight();
  lcd.setCursor(3, 0);
  lcd.print("Cerveceria");
  lcd.setCursor(6, 1);
  lcd.print("Bauer");
  sensors.begin();   //Se inicia el sensor
  Serial.begin(9600);
  delay(1000);
  digitalWrite(led_azul, HIGH);
}

void loop ()
{
  while (volumen <= 3) {
    llenado();

    Serial.print ("Volumen: ");
    Serial.print (volumen, 3);
    Serial.println (" Lts");
    setTime(00, 00, 00, 0, 1, 2000);
    digitalWrite(led_llenado, HIGH);
    tone(BUZZER, 523, 300);
  }
  if (volumen > 3) {
    Serial.print("Volumen completo\n");
    digitalWrite(Rele4, HIGH);
    
    delay(500);
  }

  while (hour() < 1) {

    time_t t = now();
    while (minute() % 3 == 0 && minute() != 0) {
      digitalWrite(Rele3, LOW);
      Serial.println("Mezclando");
      lcd.clear();
      lcd.setCursor(3, 0);
      lcd.print("MEZCLANDO");
      delay(5000);
    }

    digitalWrite(Rele3, HIGH);
    digitalWrite(led_macerado, HIGH);
    temperatura();
    lcd.clear();
    Serial.print("Temperatura= ");
    lcd.print("Temp:");
    Serial.print(temp);
    lcd.print(temp);
    lcd.print(" C");
    Serial.println(" C");
    Serial.print(hour(t));
    Serial.print(+" hrs ");
    Serial.print(minute(t));
    Serial.print(+" min ");
    Serial.print(second(t));
    Serial.println(+" seg");
    lcd.setCursor(0, 1);
    lcd.print(hour(t));
    lcd.print(+"hrs ");
    lcd.print(minute(t));
    lcd.print(+"min ");
    lcd.print(second(t));
    lcd.print(+"seg ");
    delay(1000);

    if (temp >= 65 && temp <= 72) {
      digitalWrite(Rele2, HIGH);
    }
    else {
      digitalWrite(Rele2, LOW);
    }
    if (temp > 72) {
      digitalWrite(Rele2, HIGH);
    }

  }

  if (distancia <= 50) {

    nivel();

    lcd.clear();
    lcd.print(distancia);
    lcd.print(" %");
    Serial.print(distancia);
    Serial.println(" % Completo");
    delay(200);

    digitalWrite(Rele1, LOW);
    digitalWrite(Rele2, HIGH);
    digitalWrite(Rele3, LOW);
    digitalWrite(Rele4, HIGH);
    digitalWrite(Rele5, HIGH);
    digitalWrite(Rele7, LOW);
    digitalWrite(led_vaciado, HIGH);

  }

  else {

    nivel();
    lcd.clear();
    lcd.print(distancia);
    lcd.print(" cm");
    lcd.setCursor(0, 1);
    lcd.print("Termino Macerado");
    Serial.print(distancia);
    Serial.println(" % Completo");
    digitalWrite(Rele1, HIGH);
    digitalWrite(Rele2, HIGH);
    digitalWrite(Rele3, HIGH);
    digitalWrite(Rele4, HIGH);
    digitalWrite(Rele5, HIGH);
    digitalWrite(Rele6, HIGH);
    digitalWrite(Rele7, HIGH);
    digitalWrite(led_azul, HIGH);
    delay(1000);
  }
  digitalWrite(led_azul, LOW);
  delay(200);
}

GRACIAS POR SU ATENCION :slight_smile:

Y cual es el problema del buzzer? Donde tienes que agregar la pausa y de que tipo?