Estación metereologica de arduino

Hola que tal a todos, arduino me parece una gran herramienta para desarrollar proyectos, soy novato en esto, he buscado bastante información en internet, para sacar este proyecto adelante en analizar datos del clima, sin embargo, tengo un problema, no sé, si por la forma como diseñé el codigo por mi poca experiencia, puedo cargar el codigo y corre sin ningun problema, me graba los datos, etc, pero luego de unas 5 horas el arduino se congela, y solo si le doy al boton de reset el programa vuelve a funcionar y la idea es que este sistema funcione de manera independiente por semanas sin atención. Así, entonces he averiguado de un sistema que se llama Watchdog, pero no logro conseguir la librería para el arduino due, no se si me pueden ayudar, les agradecería bastante que me ayuden a resolver este problema, en seguida dejo el codigo para ver si tienen algun problema, muchas gracias, un saludo:

#include <SPI.h> // incluye libreria interfaz SPI
#include <SD.h> // incluye libreria para tarjetas SD
#include <DHT.h> // incluye libreria DHT de Adafruit
#include <DHT_U.h> // incluye libreria Adafruit Unified Sensor
#include <Wire.h>
#include <virtuabotixRTC.h>
#include <Adafruit_BMP085.h>

#define SENSOR 4 // constante SENSOR en pin digital 4 (senal de DHT11)
int TEMPERATURA; // variable para almacenar valor de temperatura
int HUMEDAD; // variable para almacenar valor de humedad
int lluvia = A0; //Variable para almacenar valor lluvia
int Escritura = 13; // variable led de placa y led externo enciende cuando se escribe un dato en la memoria SD.
int Error = 12; // Variable led de placa y led externo cuando el sistema falló.
#define SSpin 10 // Slave Select en pin digital 10

define Escritura 13

bool inicio = true;
bool fin = true;

File myFile;
DHT dht(SENSOR, DHT11); // objeto dht del tipo DHT en pin 4 y modelo DHT11

Adafruit_BMP085 bmp;
virtuabotixRTC myRTC(6, 5, 2);

void setup()
{
Serial.begin(9600); //monitor serie a 9600 baudios
dht.begin(); // inicializacion de sensor
SD.begin(SSpin); // inicia la SD
bmp.begin(); //Inicializacion del sensor BMP 180
pinMode(Escritura, OUTPUT); //Se establece el led escritura.
pinMode(Error, OUTPUT);
}

void loop()
{

myRTC.updateTime();

myFile = SD.open("PSO.txt", FILE_WRITE);//abrimos el archivo

    if ( myFile = SD.open("PSO.txt", FILE_WRITE) )
    if ( inicio = true ){
      digitalWrite(Escritura, HIGH);  //enciende el led cuando se ha abierto el archivo en la SD
      inicio = false;
      }
      
    myFile.print(myRTC.hours);
    myFile.print(":");
    myFile.print(myRTC.minutes);
    myFile.print(":");
    myFile.print(myRTC.seconds);
    myFile.print(",");
    myFile.print(myRTC.dayofmonth);
    myFile.print("/");
    myFile.print(myRTC.month);
    myFile.print("/");
    myFile.print(myRTC.year);
    myFile.print(",");

if (myFile) {
Serial.print("DAT: ");
int humedadA = analogRead(lluvia);
TEMPERATURA = dht.readTemperature(); // almacena en variable valor leido de temperatura
HUMEDAD = dht.readHumidity(); // almacena en variable valor leido de humedad
humedadA = analogRead(lluvia);
myFile.print(bmp.readAltitude(101500));
myFile.print(",");
myFile.print(bmp.readPressure());
myFile.print(",");
myFile.print(bmp.readTemperature());
myFile.print(","); //
myFile.print(TEMPERATURA); // escribe en tarjeta el valor de temperatura
myFile.print(","); // escribe en tarjeta una coma
myFile.println(HUMEDAD); // escribe en tarjeta el valor de humedad y salto de linea
if (humedadA >=630) {
myFile.print("0");
}
if (humedadA <630 && humedadA >=210) {
myFile.print("1");
}
myFile.print(",");

if (myFile)
myFile.close(); //cerramos el archivo
if ( fin = true ){
digitalWrite(Escritura, LOW); //Apaga el led cuando se ha cerrado el archivo
fin = false;
}

Serial.print("hora = ");
Serial.print(myRTC.hours);
Serial.print(":");
Serial.print(myRTC.minutes);
Serial.print(":");
Serial.print(myRTC.seconds);
Serial.print("  Fecha = ");
Serial.print(myRTC.dayofmonth);
Serial.print("/");
Serial.print(myRTC.month);
Serial.print("/");
Serial.print(myRTC.year);
Serial.print(" ");

  if (humedadA >=630) {
  Serial.print("Seco ");                    //Escribe en el monitor serie la palabra seco
  }
  if (humedadA <630 && humedadA >=210) {
    Serial.print("Lluvia ");                 //Escribe en el monitor serie la palabra Lluvia
    }
  Serial.print(humedadA);      // escribe en monitor valor lluvia
  Serial.print(", ");            // escribe en monitor una coma
  Serial.print("Temperatura "); // Escribe en el monitor la palabra Temperatura
  Serial.print(TEMPERATURA);    // escribe en monitor el valor de temperatura
  Serial.print("°C");           //Escribe la escala °C
  Serial.print(", ");      // escribe en monitor una coma
  Serial.print("Humedad relativa "); // Escribe en el monitor la palabra humedad relativa
  Serial.print(HUMEDAD);      // escribe en monitor el valor de humedad
  Serial.print("%");        // Escribe en el monitor el porcentaje y salto de linea
  Serial.print(", ");
  Serial.print("Temperatura ");
  Serial.print(bmp.readTemperature());
  Serial.print(" °C");
  Serial.print(", ");
  Serial.print("Presion ");
  Serial.print(bmp.readPressure());
  Serial.print(" Pa");
  Serial.print(", ");
  Serial.print("Altitud ");
  Serial.print(bmp.readAltitude(101500));
  Serial.println(" Metros");

}
delay(5000);
}

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>