Si este código sigue cometiendo el mismo error vamos a tener que medir (usando millis()) los tiempos de las rutinas.
#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
const int led[5] = {10,45,13,46,44}; //pines led, Deben ser PWM
volatile unsigned long contador_dimmer = 0; // La definimos como volatile
int i,j; //Variables auxiliares para ciclos repetitivos
unsigned long T ;
unsigned long R ;
//Declaramos variables monitor TFT---------------------------------------
char nombreDia[7][12] = {"Domingo__", "Lunes____", "Martes___", "Miercoles", "Jueves___", "Viernes__", "Sabado___"};
char nombreMes[12][12]= {"Enero_____", "Febrero___", "Marzo_____", "Abril_____", "Mayo______", "Junio_____", "Julio_____","Agosto____","Septiembre","Octubre___","Noviembre_","Diciembre_"};
int dameSegundo,dameMinuto,hora,dia,mes,diaDeLaSemana;
long anio;
char dameFecha[10];
char dameHora[20];
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
DateTime HoraFecha;
void setup () {
Serial.begin(9600);
for(i=0; i<4; i++){ //salidas pines led
pinMode(led[i], OUTPUT);
}
// Comprobamos si tenemos el RTC conectado
if (! rtc.begin()) {
Serial.println("No hay un módulo RTC");
while (1);
}
//definimos propiedades monitor tft------------------------------------------------
tft.reset();
uint16_t identifier = tft.readID();
if (identifier == 0xEFEF) identifier = 0x9486;
tft.begin(identifier);
tft.InitLCD();
tft.fillScreen(BLACK); //Rellenamos la pantalla de color negro*/
}
// hay que descomentar la linea de debajo y compilar solo una vez para actualizar hora
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//--- Contador creado por cada interrupcion---//
void dimmer_mas(){
if (contador_dimmer == 255UL)
contador_dimmer = 0UL;
else
contador_dimmer++; // Contador veces interrupcion
}
void dimmer_menos(){
if (contador_dimmer == 0UL)
contador_dimmer = 255UL;
else
contador_dimmer--; // Contador veces interrupcion
}
void loop () {
if (millis() - T> 1000UL) { //mostrará la hora cada 1 segundo o 1000 mseg
queHora();
T = millis();
}
if (millis() - R> 21176UL) { //se ejecuta 2.8 veces por cada minuto para hacer 85 pasos en 30m, cada 21,176s
enciendeLeds();
R = millis();
}
//delay(100);
}
void queHora(){
DateTime now = rtc.now();
HoraFecha = rtc.now(); //obtenemos la hora y fecha actual
dameSegundo = HoraFecha.second();
dameMinuto = HoraFecha.minute();
hora = HoraFecha.hour();
dia = HoraFecha.day();
mes = HoraFecha.month();
anio = HoraFecha.year();
diaDeLaSemana = HoraFecha.dayOfTheWeek();
//tft.clrScr(); //borra texto tft
tft.setCursor(20,20); //Posicion del cursor
tft.setTextSize(2); //Tamaño de la fuente
tft.setTextColor(RED, BLACK); //Color de la fuente en rojo
/*las posiciones son ancho y alto, por ese orden*/
tft.print(nombreDia[diaDeLaSemana], 10,5);
sprintf(dameFecha,"%02d", dia); tft.setCursor(10, 25); tft.println(dameFecha);
tft.print("de", 40,25);
tft.print(nombreMes[mes-1], 70,25);
tft.print("del", 195,25);
sprintf(dameFecha,"%4d", anio); tft.setCursor(235,25); tft.println(dameFecha);
tft.setCursor(10, 60);
tft.setTextColor(WHITE, BLACK); tft.setTextSize(4);
sprintf(dameHora,"%02d:%02d:%02d", hora, dameMinuto, dameSegundo);
tft.println(dameHora);
sprintf(dameHora,"%02d:%02d:%02d %02d/%02d/%02d", hora, dameMinuto, dameSegundo, dia, mes, anio);
Serial.println(dameHora);
}
void enciendeLeds(){
analogWrite(led[1],0);
analogWrite(led[2],0);
analogWrite(led[3],0);
analogWrite(led[4],0);
if (dameMinuto == 8) {
if (dameSegundo >= 0 && dameSegundo <= 3) {
contador_dimmer=0;
}
}
if (dameMinuto >= 8 && dameMinuto <38){
dimmer_mas();
ledAzul();
monitor_dimmer();
}
}
void ledRojo(){
analogWrite(led[0],contador_dimmer);
}
void ledVerde(){
analogWrite(led[1],contador_dimmer);
}
void ledAmarillo(){
analogWrite(led[2],contador_dimmer);
}
void ledBlanco(){
analogWrite(led[3],contador_dimmer);
}
void ledAzul(){
analogWrite(led[4],contador_dimmer);
}
void monitor_dimmer(){
Serial.print("contador_dimmer = ");
Serial.println(contador_dimmer);
delay(100);
Serial.println();
}