Pero no sabes como habia simplificado más aun tu programa!!
Al menos permiteme darte como he encarado el resto y lo evaluas con tiempo.
Asi estaba quedando la estructura
#define FILTRO2000 1
#define FILTRO700 2
#define FILTROUV 3
#define SolenoideCO2 4
#define Ventiladores 5
#define ElectroBomba 6
#define Peristalticas 7
#define Calentador 8
struct _config = {
int intervalo;
int coordY;
unsigned long MillisPrevias; // variable reservado para guardar millis()
byte pin;
byte interruptor;
bool estado;
int x;
};
_config config[8] = {{200, 50, 0UL, 12, 54, false, 343}, // Filtro2000 - MillisPrevias1
{220, 81, 0UL, 11, 55, false, 343}, // Filtro700 - MillisPrevias2
{240, 236, 0UL, 8, 58, false, 343}, // FiltroUV - MillisPrevias3
{260, 205, 0UL, 10, 56, false, 343}, // SolenoideCO2 - MillisPrevias4
{280, 174, 0UL, 9, 57, false, 343}, // ventiladores - MillisPrevias5
{300, 267, 0UL, 7, 59, false, 343}, // ElectroBomba - MillisPrevias6
{320, 298, 0UL, 6, 60, false, 343}, // Peristalticas- MillisPrevias7
{ 0, 0, 0UL, 5, 61, false, 343} // Calentador
};
Como verás ya absorbe el pin con el que comandas los Relés, a contiinuación, el pin del interruptor, seguido su estado cuando lo leas cosa que haras con un simple for(), las variables x como p.ej xFiltro2000 que pones a 343.
Bueno tu código se reduce muchísmo porque salvo un caso especial en general son tareas mas o menos parecidas con algunos detalles peculiares como ocurre siempre.
Asi cambió Interruptores()
void Interruptores() { //Chequea los 7 interruptores del gabinete normalmente en ON https://imgur.com/5lHIXwC
{
for (byte i= 0; i<7; i++) {
config[i].estado = digitalRead(config[i].interruptor);
}
}
y asi iba con tu procedimiento void MenuPrincipal()
//············································································································
void MenuPrincipal(){
DibujaMenu();
while(1) {
ActualizaElReloj(); //Actualiza el valor de las variables Horas, Minutos y Segundos
DibujaRelojDigital(); //El reloj digital del Display del frontal de la cabina con los circuitos
//Interruptores(); //Chequea el estado de los 7 interruptores
for (byte i= 0; i<7; i++) {
config[i].estado = digitalRead(config[i].interruptor);
switch(i) {
case 1: //Controla el Relé del Filtro de 2000 L/h (NC)
if (config[i].estado == 0) { //Si el interruptor del filtro grande está en ON
digitalWrite (config[i].pin, HIGH); //Lógica inversa, apagado (Rele NC) Filtro Funcionando
DibujaBarras("Filtro2000",config[i].x); //Dibuja las Barras de progresión cuando el filtro está funcionando
}
else {
tft.fillRect(343,40,137,25,AZUL); //"Borra" las barras de progresión
digitalWrite(config[i].pin, LOW); //Interruptor cerrado (etiqueta en OFF), encendido Relé, apagado el Filtro (NC)
}
break;
case 2: // Controla el Relé del Filtro de 700 L/h (NC)
if (config[i].estado == 0) { //El interruptor del filtro pequeño está en ON
digitalWrite (config[i].pin, HIGH); //lógica inversa, apagado (Rele NC) Filtro funcionando
DibujaBarras("Filtro700",config[i].x); //Dibuja Barras de progresión
}
else {
tft.fillRect(343,71,137,25,AZUL); //"Borran" las barras de progresión
digitalWrite(config[i].pin, LOW); //Interruptor cerrado (etiqueta en OFF), encendido Relé, apagado el Filtro (NC)
}
break;
case 3: // Controla el Relé del Filtro Ultravioleta (NA)
if (((Hora > 12 && Hora < 18) || (Hora > 18 && Hora < 23)) && config[i].estado == 0 && config[FILTRO700].estado == 0) {
digitalWrite (config[i].pin, LOW); // Encendido
DibujaBarras("FiltroUV",config[i].x); // Dibuja Barras de progresión
}
else {
digitalWrite(config[i].pin, HIGH); // Apaga el filtro UV
tft.fillRect(343,226,137,25,AZUL);
}
break;
no esta completo pero seguia intentando eliminar cosas