mi puerto serial deja de funcionar después de que le mando un dato

Hola chicos buen día, espero todos se encuentren muy bien, estoy acudiendo a esta comunidad ya que no se por que tengo el siguiente problema:

En el siguiente programa estoy leyendo la cantidad de agua que pasa por un sensor (caudalimetro), todo esto funciona bien , lo quiero usar para un proyecto de llenado semi automático de botellas , por lo que obvio no quiero que al conectar todo se empiece a llenar la botella, quiero que empiece a llenarse cuando yo presione la tecla "s" de mi computadora, por lo que he metido básicamente todo en un while en donde al cumplirse una cierta condición el ciclo while termina.

Cuando ejecuto el código todo va muy bien, le mando la letra "s" por el puerto serial y empieza a trabajar de forma correcta, una vez que la condición IF que esta dentro del while se cumple, se sale del ciclo while y deja de llenar , el problema es que si vuelvo a enviarle una "s" por el puerto serial ya no hace nada, como si se deshabilitara el puerto serial o en verdad no se que pase, por que me di cuenta que sin reiniciar el arduino solo cerrando la ventana del puerto serial y volviéndola abrir, al mandarle una "s" si vuelve a ejecutar el ciclo while, pero obvio no quiero estar abriendo y cerrando la ventana del puerto serial.

Al parecer este problema este relacionado con las interrupciones, por que hice un programa prácticamente igual pero sin utilizar las interrupciones y no pasa lo antes mencionado o no tengo idea de que pueda ser pero en verdad espero me puedan ayudar o si se les ocurre otra alternativa estaría muy agradecido

Básicamente lo que busco es que cuando presiones "s" se comience a llenar la botella y que se deje de llenar cuando el sensor cumple cierta condición y que al volver a presionar "s" el proceso comience nuevamente.

volatile int NumPulsos; //variable para la cantidad de pulsos recibidos
int PinSensor           = 2;    //Sensor conectado en el pin 2
float factor_conversion = 38; //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 estado;
char dato;
float frecuencia        = 0;
float caudal_L_m        = 0 ;
int rele                = 3;

//---Función que se ejecuta en interrupción---------------
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(1000);   //muestra de 1 segundo
  noInterrupts(); //Deshabilitamos  las interrupciones
  frecuencia = NumPulsos; //Hz(pulsos por segundo)
  return frecuencia;
}

void setup()
{

  Serial.begin(9600);
  pinMode(PinSensor, INPUT);
  pinMode(rele, OUTPUT);
  attachInterrupt(0, ContarPulsos, RISING); //(Interrupción 0(Pin2),función,Flanco de subida)
  t0 = millis();
  estado = 0;
}

void loop ()
{
  Serial.println(estado);
  Serial.println(volumen);

  if (Serial.available()>0) {
      dato = Serial.read();
      Serial.println("tRUE");
      if (dato == 's') {
          Serial.println("llenando");
          estado = 1;
          Serial.println(estado);
      }
  }

  while (estado == 1) {
          frecuencia = ObtenerFrecuecia(); //obtenemos la frecuencia de los pulsos en Hz
          caudal_L_m = frecuencia / factor_conversion; //calculamos el caudal en L/m
          dt = millis() - t0; //calculamos la variación de tiempo
          t0 = millis();
          volumen = volumen + (caudal_L_m / 60) * (dt / 1000); // volumen(L)=caudal(L/s)*tiempo(s)
          digitalWrite(rele, HIGH);
          Serial.print ("Caudal: ");
          Serial.print (caudal_L_m, 3);
          Serial.print ("L/min\tVolumen: ");
          Serial.print (volumen, 3);
          Serial.println (" L");
          if (volumen >= 0.355) {
              Serial.println("finalizado");
              digitalWrite(rele, LOW);
              estado = 0;
              volumen = 0;
              break;
          }
  }
}

Moderador
Por favor edita tu título usando minúsculas.
Normas del foro
Sobre escribir todo en mayúsculas

Coloca un simple estado = 0; antes del break y verás que funcionará.

if (volumen >= 0.355) {
              Serial.println("finalizado");
              digitalWrite(rele, LOW);
              estado = 0;
              volumen = 0;
              estado = 0;
              break;
          }