Control de luces de Acuario

asi dices?

#include <Wire.h>
#include "RTClib.h"
#include <UTFTGLUE.h>             //tft
UTFTGLUE tft(0,A2,A1,A3,A4,A0);   //tft

RTC_DS3231 rtc; // Declaramos un RTC DS3231

unsigned long S ;

//Declaramos variables monitor TFT---------------------------------------
int Segundo;
char Vsegundo[2];

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define GRAY    0x8410

uint16_t version = MCUFRIEND_KBV_H_;

DateTime HoraFecha;

void setup () {
  Serial.begin(9600);

   // Comprobamos si tenemos el RTC conectado
  if (! rtc.begin()) {
   Serial.println("No hay un módulo RTC");
   while (1);
  }

  //definimos propiedades monitor tft------------------------------------------------ 
    uint16_t ID = tft.readID(); //
    tft.begin(ID);
    tft.setRotation(1); //pantalla horizontal
    tft.fillScreen(0x0000); //Rellenamos la pantalla de color negro
}

void loop () {
  DateTime now = rtc.now();
  HoraFecha = rtc.now(); //obtenemos la hora y fecha actual
  
  if (millis() - S> 1000UL) {   //mostrará la hora cada 1 segundo o 1000 mseg
    unsigned long start = micros(); 
    queSegundo();                 
      S = millis();
      Serial.println(micros() - start);
  }
}

unsigned long queSegundo() {
  Segundo = HoraFecha.second();
  sprintf(Vsegundo,"%02d", Segundo);
  tft.setCursor(155, 60);
  tft.setTextColor(WHITE, BLACK); 
  tft.setTextSize(4);
  tft.println(Vsegundo);
}

De esta forma es lo que comentaba, salta un segundo cada 10 o 20, las lecturas que da son de 46108 a 46136