Watchdog y puerto serie

Hola!
Estoy trabajando en un proyecto en el que utilizo el watchdog para evitar cuelgues en el Arduino.
Encontré en varios sitios recomendaciones sobre como utilizarlo y me resultaron bastante útiles, hasta que tuve algunos problemas cuando llegaba el momento de utilizar el puerto serie.
Si la transferencia superaba el tiempo de acción del watchdog tenia un reinicio, por lo que tuve que encarar la siguiente solución. Lo que hago es crear una función que se llama cada cierto tiempo, en la que se transmite datos por el serie ( en este caso el delay(6000) simula el tiempo de transmisión) cuyo tiempo supera al del watchdog (WDTO_4S).
Aquí se puede ver el sketch:

#include <avr/wdt.h>

unsigned long previousMillis = 0;              //almacena la ultima vez que el loop fue actualizado
const long intervalo = 60000;

void setup(){
 wdt_disable();           
 delay(3000);            //tiempo necesario y recomendado para evitar que el wdg interfiera si se desea cargar otro codigo

 Serial.begin(9600);
 wdt_enable(WDTO_4S);
}

void W_S();

void loop(){

  delay(1000);    //si aqui pongo un valor superior al del Watchdog, en este caso 4 seg, el sistema reinicia
  wdt_reset();
  
  if (millis() - previousMillis >= intervalo){
    previousMillis = millis();
    W_S();
  }
}

void W_S (){
 wdt_disable();  //aqui desactivo el watchdog ya que el serie transmite una trama de datos que supera el tiempo de accion del watchdog. Para este ejemplo pongo un delay de 6000.
 delay(6000);    //delay simulando ser una transmision serie
 wdt_enable(WDTO_4S);   //activo el wathdog
}

Mi duda es sobre si esta estrategia es correcta (la de apagar y encender el watchdog dentro de la función), por lo que me gustaría tener vuestras opiniones sobre este tema.
Muchas gracias a todos!!

Si tienes que enviar tanta información que esto bloquea el watchdog porque entonces no parcializas el envio de la información de modo que a tu vista sea imperceptible el cambio pero que se le de margen al watchdog para hacer su tarea.

Una máquina de estados podria servirte.
No se que estas enviando que requiera tanto tiempo pero todo puede arreglarse.
Sin mas datos por ahora poco puedo decir o aconsejarte.
Sería bueno ver tu código y la situación que genera el problema de los 6 segundos.

Hola!
Muchas gracias por tu respuesta!
Paso a contestar:

surbyte:
Si tienes que enviar tanta información que esto bloquea el watchdog porque entonces no parcializas el envio de la información de modo que a tu vista sea imperceptible el cambio pero que se le de margen al watchdog para hacer su tarea.

Podria ser... aplique este concepto y por ahora (parece... ) funciona.

surbyte:
Una máquina de estados podria servirte.

Perdón pero nunca escuche sobre eso... me podes facilitar alguna info sobre este tema e indagar un poco?

surbyte:
No se que estas enviando que requiera tanto tiempo pero todo puede arreglarse.
Sin mas datos por ahora poco puedo decir o aconsejarte.
Sería bueno ver tu código y la situación que genera el problema de los 6 segundos.

El tiempo es largo ya que estoy transfiriendo por Bluetooth la lectura de un archivo log en donde almaceno la lectura de unos sensores.

Mi ppal duda es si la estrategia que aplico, desactivar y luego activar el watchdog dentro de la funcion, es correcta.

Saludos y muchas gracias!!

Bueno como dije.. creo que equivocas la forma de enviar los datos.
Deberíamos ver todo tu código para replantear.
Por favor si supera 9k solo adjúntalo de lo contrario ya sabes, usa etiqueta para postearlo debidamente. En las normas se explica.

Supongo que los datos estarán almacenados en una SD porque no hay modo que se transfiera información que dure 6 segundos.
Cuando veamos que estas haciendo podremos opinar mejor.

En documentación => Indice de temas tutoriales => Máquina de estados y millis() tienes una muy buena explicación al respecto.