Código para Datalogger

Buen día, realicé mi código luego de muchas evoluciones, problemas y errores del mismo, todas leyendo y aprendiendo en muchos foros y ayudas de posts, videos, etc.

Lo que tengo es un proyecto para un datalogger que funciona muy bien (guarda en Micro sd), usa 6 sensores, y muestra la información en una patalla tft.

Sin embargo lo que definitivamente no pude hacer debido a mi ignorancia en programación, es que en un tiempo me grabe los datos de los sensores en la memoria micro sd (cada 60 seg) y en otro tiempo muestre los datos en la pantalla (cada 3 o 4 seg)

adjunto el código definitivo que tengo.

/*
Datalogger 6 sensores + pantalla TFT
Desarrollo de compilación de datos por Harvey Villalobos
Necesario
 * Lector de tarjetas SD y Reloj (Shield datalogger)
 * Pantalla TFT (ILI9225)
 * Sensores DS DS18B20
 Inicio del desarrollo: 12 Febrero 2018
 Última actualización realizada: 19 Abril 2019
*/

// sensores de la tarjeta micro SD
#include <SPI.h>
#include <SD.h>
// sensores de reloj
#include <Wire.h>
#include "RTClib.h"
#include <TimeLib.h>
#include <DS1307RTC.h>
// sensores de temperatura
#include <OneWire.h>
#include <DallasTemperature.h>
// pantalla
#include "TFT_22_ILI9225.h"



// Data Sensors to Arduino pin 9
#define ONE_WIRE_BUS 9

OneWire oneWire(ONE_WIRE_BUS);

// Referencia de dallas temperature.
DallasTemperature sensors(&oneWire);

#define TFT_RST 6
#define TFT_RS 5
#define TFT_CS 7 // SS
#define TFT_SDI 4 // MOSI
#define TFT_CLK 3 // SCK

#define TFT_BRIGHTNESS 200 // Brillo inicial de pantalla TFT (opcional)

// Sofwre SPI de la pantalla
TFT_22_ILI9225 tft = TFT_22_ILI9225(TFT_RST, TFT_RS, TFT_CS, TFT_SDI, TFT_CLK, TFT_BRIGHTNESS);

// Variables y constantes
int16_t x=0, y=0, w, h;

// Variables con las direcciones únicas de los sensores DS18B20
DeviceAddress sensor1 = {0x28, 0xF3, 0x45, 0x77, 0x91, 0x0B, 0x02, 0x3C};
DeviceAddress sensor2 = {0x28, 0xC9, 0x2F, 0x77, 0x91, 0x06, 0x02, 0x3B};
DeviceAddress sensor3 = {0x28, 0x22, 0x98, 0x77, 0x91, 0x08, 0x02, 0x28};
DeviceAddress sensor4 = {0x28, 0x0D, 0xA1, 0x77, 0x91, 0x08, 0x02, 0xCD};
DeviceAddress sensor5 = {0x28, 0x07, 0x4B, 0x77, 0x91, 0x0B, 0x02, 0x30};
DeviceAddress sensor6 = {0x28, 0xEA, 0x5E, 0x77, 0x91, 0x14, 0x02, 0x09};

// sd
File logFile;

// contador consecutivo
int contador;

void setup()
{
  //inicio contador
  contador=0;

  Serial.begin(9600);
  tft.begin();
  // textos iniciales de pantalla
  tft.setOrientation(3);
  tft.drawRectangle(0, 0, tft.maxX() - 1, tft.maxY() - 1, COLOR_WHITE);
  tft.fillRectangle(4, 4, 215, 22, COLOR_AZUR);
  tft.setBackgroundColor(COLOR_AZUR);
  tft.setFont(Terminal12x16);
  tft.drawText(16, 6, "Kairos ", COLOR_DARKBLUE);
  tft.setBackgroundColor(COLOR_BLACK);
  tft.setBackgroundColor(COLOR_AZUR);
  tft.setFont(Terminal12x16);
  tft.drawText(90, 6, "Metrologia", COLOR_GREEN);
  tft.setBackgroundColor(COLOR_BLACK);
  
  tft.setFont(Terminal12x16);
  tft.drawText(10, 50, "Iniciando...", COLOR_DARKGREEN);
  // Start up the Sensors library
  sensors.begin();
  // set the Sensor resolution to 9 bit - Valid values are 9, 10, or 11 bit.
  sensors.setResolution(12);
  delay(2000);


  // Buscamos los sensores conectados
  Serial.println("Buscando dispositivos...");
  Serial.print("Activos: ");
  Serial.print(sensors.getDeviceCount());
  Serial.println(" sensores");

  // Programa para tarjeta SD
  while (!Serial) {
  ; 
  }
  //Inicializamos y verifica si hay SD
  if (!SD.begin(8)) {
    Serial.println("Falla en tarjeta, o no insertada");
    return;
  }
  Serial.println("SD inicializada, ");

}

void loop()
{
  contador++;
  tmElements_t tm;
  
  RTC.read(tm);
  
  sensors.requestTemperatures(); // Get temperatures
  float temp1 = sensors.getTempC(sensor1);
  float temp2 = sensors.getTempC(sensor2);
  float temp3 = sensors.getTempC(sensor3);
  float temp4 = sensors.getTempC(sensor4);
  float temp5 = sensors.getTempC(sensor5);
  float temp6 = sensors.getTempC(sensor6);
  Serial.print(contador);
  Serial.print(";");
  Serial.print(tm.Day);
  Serial.print("/");
  Serial.print(tm.Month);
  Serial.print("/");
  Serial.print(tm.Year);
  Serial.print(";");
  Serial.print(tm.Hour);
  Serial.print(":");
  Serial.print(tm.Minute);
  Serial.print(":");
  Serial.print(tm.Second);
  Serial.print(";");
  Serial.print(temp1);
  Serial.print(";");
  Serial.print(temp2);
  Serial.print(";");
  Serial.print(temp3);
  Serial.print(";");
  Serial.print(temp4);
  Serial.print(";");
  Serial.print(temp5);
  Serial.print(";");
  Serial.println(temp6);

  // Abrir archivo y escribir valor
  logFile = SD.open("datalog.csv", FILE_WRITE);
  if (logFile) { 
        logFile.print(contador);
        logFile.print(";");
        logFile.print(tm.Day);
        logFile.print('/');
        logFile.print(tm.Month);
        logFile.print('/');
        logFile.print(tm.Year);
        logFile.print(";");
        logFile.print(tm.Hour);
        logFile.print(':');
        logFile.print(tm.Minute);
        logFile.print(':');
        logFile.print(tm.Second);
        logFile.print(';');
        logFile.print(sensors.getTempC(sensor1));
        logFile.print(";");
        logFile.print(sensors.getTempC(sensor2));
        logFile.print(";");
        logFile.print(sensors.getTempC(sensor3));
        logFile.print(";");
        logFile.print(sensors.getTempC(sensor4));
        logFile.print(";");
        logFile.print(sensors.getTempC(sensor5));
        logFile.print(";");
        logFile.println(sensors.getTempC(sensor6));
        logFile.close();
  } 
  else {
  Serial.println("Error escribiendo en el archivo");
  }

  //delay(5000);


  // limpia la pantalla
  tft.clear();
 
  tft.drawRectangle(0, 0, tft.maxX() - 1, tft.maxY() - 1, COLOR_WHITE);
  tft.fillRectangle(4, 4, 215, 22, COLOR_AZUR);
  tft.setBackgroundColor(COLOR_AZUR);
  tft.setFont(Terminal12x16);
  tft.drawText(16, 6, "Kairos ", COLOR_DARKBLUE);
  tft.setBackgroundColor(COLOR_BLACK);
  tft.setBackgroundColor(COLOR_AZUR);
  tft.setFont(Terminal12x16);
  tft.drawText(90, 6, "Metrologia", COLOR_GREEN);
  tft.setBackgroundColor(COLOR_BLACK);
  // Escribir las temperaturas en pantalla
  tft.setFont(Terminal11x16);
  tft.drawText(28, 50, "Sensor 1:", COLOR_DARKGREEN);
  drawTempInColour(125, 50, temp1, GetColourForTemp(temp1));
  tft.drawText(28, 70, "Sensor 2:", COLOR_DARKGREEN);
  drawTempInColour(125, 70, temp2, GetColourForTemp(temp2)); 
  tft.drawText(28, 90, "Sensor 3: ", COLOR_DARKGREEN);
  drawTempInColour(125, 90, temp3, GetColourForTemp(temp3));
  tft.drawText(28, 110, "Sensor 4:", COLOR_DARKGREEN);
  drawTempInColour(125, 110, temp4, GetColourForTemp(temp4));
  tft.drawText(28, 130, "Sensor 5:", COLOR_DARKGREEN);
  drawTempInColour(125, 130, temp5, GetColourForTemp(temp5));
  tft.drawText(28, 150, "Sensor 6:", COLOR_DARKGREEN);
  drawTempInColour(125, 150, temp6, GetColourForTemp(temp6));

  delay(60000);

}

void drawTempInColour(byte x, byte y,float temp,unsigned int colour)
{
char buf[16];
dtostrf(temp,6,2,buf);
tft.drawText(x, y, buf,colour);  
}

unsigned int GetColourForTemp(float temp)
{
unsigned int Colour = COLOR_BLUE;
if (temp > 0)
  {
    Colour = COLOR_RED;
  }
return Colour;
}

Muchísimas gracias por su ayuda

Edita el título

Ayuda a un novato en problemas

no tiene nada que ver con tu consulta. Lee las normas respecto de los títulos. Eso que has puesto es un titulo INUTIL

No es creíble que hayas hecho semejante programa y no puedas resolver el grabar cada 60 seg y mostrar datos cada 4 segundos.

Solución: ve a Documentación => Indice de temas tutoriales => millis()

Usa millis() y quita todos los delay() que tengas.

No he visto tu códigoi pero ya me lo imagino.

Ahora luego de verlo me encuentro que usas muchos DS18B20. Cada DS18B20 consume 705mseg para tomar su dato.. asi que ten presente eso.

Y como me imaginé

 delay(60000);

Eso es una barbaridad, cómo esperas controlar cosas.

Sigue mi consejo, olvida el uso de delay() en los programas ya que solo sirve para hacer parpadear leds o cosas muy cortas luego solo genera problemas como el que estas consultando.

----------------------------------------------------
-----------Datalogger Kairos Metrología-------------
            https://www.kmetrologia.com             
----------------------------------------------------

Ademas de que eres una empresa comercial...