Datalogger con RTC

Buongiorno a tutti,
Dopo aver acquistato una scheda mega2560 con una molteplicità di sensori ho iniziato con la costruzione e progettazione di una stazione meteo.
Data la non disponibilità immediata di tutti i sensori sto lentamente assemblando andando ad arricchire il programma che allego. Esso è collegato ad un lettore su scheda SD sui quali vengono salvati periodicamente (ho impostato di prova 60 secondi) i dati rilevati.
Il sensore finora presente è il DHT11, che so essere non performante, ma mi consente in attesa di qualcosa di meglio di provare lo sketch.

La prima cosa che chiedo è la seguente:

Nel codice ho definito un delay pari a 60 secondi per poter indicare ogni quanto fare la misurazione. Mi confermate che praticamente non passano effettivamente 60 secondi ma qualcosa in più a causa del fatto che ho la parte di scrittura sulla SD che “assorbe” del tempo?

/*Alimentatore di Arduino 7-12V.*/

#include <DS1302.h>           /* includo la libreria della scheda CLOCK*/
#include <SPI.h>              /* includo la libreria di comunicazione per la SD*/
#include <SD.h>               /* includo la libreria della scheda SD*/
#include <DHT.h>              /* includo la libreria del sensore di temperatura e umidità*/
#define DHTPIN 8              /* pin 8 dell'arduino a cui andrò a collegare il sensore DHT11*/
#define DHTTYPE DHT11         /* DHT11 è il tipo di sensore che utilizzo per la misura*/
DHT dht(DHTPIN,DHTTYPE);
File myFile;
/*  Collegamento Pin RTC:
    Pin +5V           -> Alimentazione modulo display e RTC
    Pin GND           -> GND modulo modulo display e RTC
    Pin Digital 2     -> Pin CE - RST modulo RTC
    Pin Digital 3     -> Pin I/O - DAT modulo RTC
    Pin Digital 4     -> Pin CLCK - CLK modulo RTC
  */
DS1302 rtc(2, 3, 4);          /* Creazione oggetto RTC (Real Time Clock)*/

void setup()
{
  Serial.begin(9600);         /* Procedura per controllo corretto funzionamento della scheda SD*/
  Serial.print("Inizializzazione Card: ");
  if (!SD.begin(53)) //il Pin 4 è collegato a CS
  {
    Serial.println("FALLITA!");
    return;
  }
  Serial.println("ESEGUITO!");
  rtc.halt(false);             /* Imposta RTC in run-mode*/
  rtc.writeProtect(false);     /* Imposta RTC e disabilita la protezione da scrittura*/
  rtc.setDOW(WEDNESDAY);          /* Imposta il giorno della settimana a SUNDAY*/
  rtc.setTime(22, 00, 0);      /* Imposta l'ora come 11:32:00 (Formato 24hr)*/
  rtc.setDate(16, 1, 2018);    /* Imposta la data cone 12 febbraio 2017 */
  delay(2000);                 /* Tempo che lascio al sistema per azzeramento dei sensori evitando dati non sensati all'attacco della basetta.*/
}

void loop() {
                            
int t = dht.readTemperature();
int h = dht.readHumidity();
                               /* Dati mostrati a seriale per correttezza programma.*/
/*Serial.print("Temperatura:");
Serial.print(t);
Serial.print(",");
Serial.print("Umidità:");
Serial.println(h);*/
delay(60000);

 myFile = SD.open("test.txt", FILE_WRITE);    /*Apertura/creazione di un file di testo in modalità scrittura.*/
 
 if (myFile) {                                /*Dichiarazione che va scrivere i file sul .txt se questo è stato aperto correttamente.*/
   myFile.print(rtc.getDOWStr());             /*RTC: invia giorno della settimana*/
   myFile.print(",");
   myFile.print(rtc.getDateStr());            /*RTC: invia data*/
   myFile.print(",");
   myFile.print(rtc.getTimeStr());            /*RTC: invia ora*/
   myFile.print(",");
   myFile.print(t);
   myFile.print(",");
   myFile.println(h);
   myFile.close();
 }
}

La seconda cosa è invece relativa all’RTC DS1302 presente che fra una rilevazione e l’altra di un inuto perde sempre un secondo. Allego qualche risultato del .txt:

Wednesday,16.01.2018,22:01:02,9,23
Wednesday,16.01.2018,22:02:03,7,23
Wednesday,16.01.2018,22:03:04,7,23
Wednesday,16.01.2018,22:04:04,7,23
Wednesday,16.01.2018,22:05:05,7,23
Wednesday,16.01.2018,22:06:06,7,23
Wednesday,16.01.2018,22:07:06,7,23
Wednesday,16.01.2018,22:08:07,7,23

Il secondo che ogni due/tre misurazioni perdo, è legato alla prima domanda o a qualcosa d’altro che non è correttamente implementato?
Come posso eventualmente risolvere il problema?
Oppure è legato al sensore di bassa precisione?

Grazie

Andrea

Non usare delay. Usa il tempo del RTC per determinare il momento della misura e registrazione.
Ciao Uwe

Ti ringrazio per il suggerimento.
Vado subito a studiarmi la libreria dell'RTC.

Grazie

Andrea