Datalogger di pressione

C'è ancora qualche bega (il codice si blocca), i serial.print mi servono per vedere dove si blocca.
prima per qualche motivo faceva solo due cicli ora si impianta all'entrata di S_SAVE

#include <DHT.h>
#include <DHT_U.h>
#include <ADS1115_WE.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include "RTClib.h"
#include <avr/wdt.h>

#define DHTTYPE DHT22   // DHT 22 
#define I2C_ADDRESS 0x48 //definisce indirizzo ADC

#define S_START 0 //stato di inizializazione 
#define S_WAIT 1 //stato di attesa interupt
#define S_SAVE 2 //stato di salvataggio dati 



#define PIN_Temp 7 //definisce pin per il sensore di temoperatura
#define PIN_Int 2   //definisce pin per Allarme RTC DS3231
#define CS 5       //Definisce il pin per il CS
#define RELAY 3       //definisce il pin per relè malfunzionamento
float voltage0 = 0;
float voltage1 = 0;
float voltage2 = 0;
float voltage3 = 0;
volatile byte Status = S_START;

DHT dht(PIN_Temp, DHTTYPE); //inizializza oggetto DHT
RTC_DS3231 rtc; //inizializza oggetto RTC

ADS1115_WE adc = ADS1115_WE(I2C_ADDRESS); //inizializza ADC

void setup() {


  Serial.begin(9600); //avvia la seriale a 9600
  delay(500);  // attende la stabilizazione della seriale 

  
   
  while (!SD.begin(CS)) //attende che la SD si inizializzi
  {
    Serial.println("Impossibile trovare SD, Ritento tra 5 secondi");
    Serial.flush();
    delay(5000);
  }
    Serial.println("SD Inizializata");

  while (!rtc.begin())  //aspetta che RTC Risponda
  {
    Serial.println(("Impossibile trovare DS3231, Ritento tra 5 secondi"));
    Serial.flush();
    delay(5000);
  } 
  rtc.disable32K(); // disabilita uscita 32K
  rtc.writeSqwPinMode(DS3231_OFF); //disattiva uscita onda quadra
  rtc.clearAlarm(1);
  rtc.disableAlarm(1);
  rtc.disable32K(); // disabilita uscita 32K
  rtc.writeSqwPinMode(DS3231_OFF);

  Serial.println("RTC OK");
  
  
  dht.begin(); //inizializza DHT22
  delay(100);
  Serial.println("DHT22 OK");

  Wire.begin();
  while (!adc.init())  //aspetta che ADC Risponda
    {
      Serial.println(("Impossibile inizializare ADC, Ritento tra 5 secondi"));
      Serial.flush();
      delay(5000);
    }
  Serial.println("ADC Inizializato");
  adc.setVoltageRange_mV(ADS1115_RANGE_6144); //setta lettura +/- 6.114v
  adc.setMeasureMode(ADS1115_SINGLE); //single shot
  
  pinMode(RELAY, OUTPUT);//imposto l'uscita del relay come OUTPUT 
  pinMode(PIN_Int, INPUT_PULLUP);//imposto l'uscita del Interupt ccome INPUT + Pullup
  //wdt_enable(WDTO_8S); //avvia WDT 8 seocndi


}

void loop() {

  switch(Status){
      case S_START:  
      digitalWrite(RELAY, HIGH); //eccito il relè/chiudo il contatto NO
     Serial.print("entro in save");
     Status = S_SAVE;
      break;

      case S_WAIT:
      long ora = millis;
      long dopo = millis + 1000;
      if(ora>=dopo){Serial.print(ora);}// stampa ogni secondo per vedere se sta girando
      break;

      case S_SAVE:
        detachInterrupt(digitalPinToInterrupt(PIN_Int));
        Serial.print("aono in save in save");
        voltage0 = readChannel(ADS1115_COMP_0_GND); //Avvia lettura canale 0
        voltage1 = readChannel(ADS1115_COMP_1_GND); //Avvia lettura canale 1
        voltage2 = readChannel(ADS1115_COMP_2_GND); //Avvia lettura canale 2
        voltage3 = readChannel(ADS1115_COMP_3_GND); //Avvia lettura canale 3
        Serial.print("letture ADC ok");
        Scrivi();
        attachInterrupt(digitalPinToInterrupt(PIN_Int),AllarmISR, FALLING);
        Status = S_WAIT;
    break;
}

}

void Scrivi(){
      // noInterrupts(); //disabilita gli interupts per evitare strane cose durante la scrittura
            DateTime now = rtc.now(); //carica in now data e ora attuali
            File dataFile;
            dataFile = SD.open("datalog.txt", FILE_WRITE); //apre file csv
            dataFile.print(now.day(), DEC);
            dataFile.print('/');
            dataFile.print(now.month(), DEC);
            dataFile.print('/');
            dataFile.print(now.year(), DEC);
            dataFile.print(" ");
            dataFile.print(now.hour(), DEC);
            dataFile.print(':');
            dataFile.print(now.minute(), DEC);
            dataFile.print(':');
            dataFile.print(now.second(), DEC);
            dataFile.print(" ");
            dataFile.print(voltage0);
            dataFile.print(" ");
            dataFile.print(voltage1);
            dataFile.print(" ");
            dataFile.print(voltage2);
            dataFile.print(" ");
            dataFile.println(voltage3);
            dataFile.close();  //chiude file CSV
          //  interrupts();  //riabilita gli interrupts per il normale funzionamento
            Serial.println("scrittura file completata");
            rtc.setAlarm1(DateTime(now.year(),now.month(),now.day(), now.hour(), now.minute()+1, 0), DS3231_A1_Hour);  
            DateTime next = (DateTime(now.year(),now.month(),now.day(), now.hour(), now.minute()+1, 0));
            Serial.println(next.minute(), DEC);

  
}


float readChannel(ADS1115_MUX channel) {
  float voltage = 0.0;
  adc.setCompareChannels(channel);
  adc.startSingleMeasurement();
  while(adc.isBusy()){}
  voltage = adc.getResult_V(); // alternative: getResult_mV for Millivolt
  return voltage;
}

void AllarmISR() {
  Status=S_SAVE;
}

GRAZIE !!!!