Fog machine ottimizzare sketch

Salve,
Qualcuno ha per caso qualche suggerimento da darmi per poter semplificare, migliorare o rendere più performante il mio sketch per comandare una fog machine?

lo sketch è il seguente:

#include "max6675.h"

const int resint = A0; // pin interruttore resistenze
const int manint = A1; // pin pulsante manuale
const int potpin = A2; // pin potenziometro regolazione I/O relè pompe
const int fluidsens = A4; // pin sensore presenza liquido
const int resrel = 2; // pin rele resistenze
const int pumprel = 4; // pin rele temporizzato pompe
const int manrel = 7; // pir rele manuale, relè bypass relè temporizzato pompe
const int boostrel = 8; // pin rele boost, relè a pressione manuale del puldante
const int spyFCled = 12; // pin led spia presenza fluido
const int spyLTled = 11; // pin led spia temperatura bassa
const int spyRTled = 10; // pin led spia temperatura corretta
const int spyHTled = 9; // pin led spia temperatura alta

int thermoDO = 3;  //pin collegamenti max6675 olimex
int thermoCS = 5;
int thermoCLK = 6;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

int resstate = 0; // stato rele resistenze
int lastresstate = LOW; // ultimo stato rele resistenze
int manstate = 0; // stato rele interruttore manuale
int lastmanstate = LOW; // ultimo stato interruttore manuale
int valpot = 0; // valore potenziometro
int delayvalLRT = 0; // valore delay pompe temperatura corretta
int delayvalRT = 0; // valore delay pompe temperatura corretta
int fluidstate = 0; // valore sensore liquido
int lastfluidstate = LOW; // ultimo valore sensore liquido

void setup ()
{
  pinMode(resint, INPUT);
  pinMode(manint, INPUT);
  pinMode(potpin, INPUT);
  pinMode(fluidsens, INPUT);
  pinMode(resrel, OUTPUT);
  pinMode(pumprel, OUTPUT);
  pinMode(manrel, OUTPUT);
  pinMode(boostrel, OUTPUT);
  pinMode(spyFCled, OUTPUT);
  pinMode(spyLTled, OUTPUT);
  pinMode(spyRTled, OUTPUT);
  pinMode(spyHTled, OUTPUT);

  Serial.begin(9600);

  Serial.println("MAX6675 test");
  delay(1000);
}

void loop ()
{
  fluidstate=digitalRead(fluidsens);
  resstate=digitalRead(resint);
  manstate=digitalRead(manint);
  valpot=analogRead(potpin);
  delayvalLRT=map(valpot, 112, 1000, 250, 500);
  delayvalRT=map(valpot, 112, 1000, 250, 4000);
  int tempsens=thermocouple.readCelsius();



  switch (fluidstate) //sensore presenza liquido 
  {
  case LOW: // non fa corto, liquido esaurito
    digitalWrite(spyFCled, HIGH);
    digitalWrite(resrel, HIGH);
    digitalWrite(pumprel, HIGH);
    digitalWrite(manrel, HIGH);
    digitalWrite(boostrel, HIGH);
    digitalWrite(spyLTled, LOW);
    digitalWrite(spyRTled,LOW);
    digitalWrite(spyHTled,LOW);
    break;
  case HIGH: // fa corto liquido presente
    digitalWrite(spyFCled, LOW);
    if (tempsens<50) // temperatura bassa
    {
      switch (resstate) // interruttore resistenze
      {
      case HIGH: // solo resistenze accese
        digitalWrite(resrel,LOW);
        digitalWrite(pumprel, HIGH);
        digitalWrite(spyLTled,HIGH);
        digitalWrite(spyRTled,LOW);
        digitalWrite(spyHTled,LOW);
        break;
      case LOW:
        digitalWrite(resrel,HIGH);
        digitalWrite(pumprel, HIGH);
        digitalWrite(spyLTled, LOW);
        digitalWrite(spyRTled,LOW);
        digitalWrite(spyHTled,LOW);
        break;
      default:
        break;
      }
    }
    if (tempsens>51 && tempsens<100) // temperatura bassa intermedia
    {
      switch (resstate)  // interruttore resistenze
      {
      case HIGH: // solo resistenze accese
        digitalWrite(resrel,LOW);
        digitalWrite(pumprel, HIGH);
        digitalWrite(spyLTled,HIGH);
        delay(500);
        digitalWrite(spyLTled, LOW);
        delay(500);
        digitalWrite(spyRTled,LOW);
        digitalWrite(spyHTled,LOW);
        break;
      case LOW:
        digitalWrite(resrel,HIGH);
        digitalWrite(pumprel, HIGH);
        digitalWrite(spyLTled, LOW);
        digitalWrite(spyRTled,LOW);
        digitalWrite(spyHTled,LOW);
        break;
      default:
        break;
      }
    }
    if (tempsens>101 && tempsens<150) // temperatura bassa quasi ottimale
    {
      switch (resstate) // interruttore resistenze
      {
      case HIGH: // solo resistenze accese
        digitalWrite(resrel,LOW);
        digitalWrite(pumprel, HIGH);
        digitalWrite(spyLTled,HIGH);
        delay(1000);
        digitalWrite(spyLTled, LOW);
        delay(1000);
        digitalWrite(spyRTled,LOW);
        digitalWrite(spyHTled,LOW);
        break;
      case LOW:
        digitalWrite(resrel,HIGH);
        digitalWrite(pumprel, HIGH);
        digitalWrite(spyLTled, LOW);
        digitalWrite(spyRTled,LOW);
        digitalWrite(spyHTled,LOW);
        break;
      default:
        break;
      }
    }
     if (tempsens>151 && tempsens<180) // temperatura ottimale bassa
    {
      switch (resstate) // interruttore resistenze
      {
      case HIGH: // resistenze e pompe accese ( relè pompe a temporizzazione ridotta)
        digitalWrite(resrel,LOW);
        digitalWrite(pumprel, LOW);
        delay(delayvalLRT);
        digitalWrite(pumprel, HIGH);
        delay(delayvalLRT);
        digitalWrite(spyRTled,HIGH);
        digitalWrite(spyLTled,LOW);
        digitalWrite(spyHTled,LOW);
        break;
      case LOW:
        digitalWrite(resrel,HIGH);
        digitalWrite(pumprel, HIGH);
        digitalWrite(spyRTled, LOW);
        digitalWrite(spyLTled,LOW);
        digitalWrite(spyHTled,LOW);
        break;
      default:
        break;
      }
    }
    if (tempsens>181 && tempsens<340) // temperatura ottimale corretta
    {
      switch (resstate) // interruttore resistenze
      {
      case HIGH: // resistenze e pompe accese (relè pome a temporizzazione corretta)
        digitalWrite(resrel,LOW);
        digitalWrite(pumprel, LOW);
        delay(delayvalRT);
        digitalWrite(pumprel, HIGH);
        delay(delayvalRT);
        digitalWrite(spyRTled,HIGH);
        digitalWrite(spyLTled,LOW);
        digitalWrite(spyHTled,LOW);
        switch (manstate) // pulsante controllo manuale
        {
        case HIGH: // relè temporizzato chiuso, relè non temporizzato aperto
          digitalWrite(manrel,LOW);
          digitalWrite(boostrel,LOW);
          break;
        case LOW:
          digitalWrite(manrel, HIGH);
          digitalWrite(boostrel, HIGH);
          break;
        default:
          break;
        }
        break;
      case LOW:
        digitalWrite(resrel,HIGH);
        digitalWrite(pumprel, HIGH);
        digitalWrite(spyRTled, LOW);
        digitalWrite(spyLTled,LOW);
        digitalWrite(spyHTled,LOW);
        break;
      default:
        break;
      }
    }
    if (tempsens>341)  // temperatura elevata
    {
      
      digitalWrite(resrel, HIGH);
      digitalWrite(pumprel, HIGH);
      digitalWrite(manrel, HIGH);
      digitalWrite(boostrel, HIGH);
      digitalWrite(spyLTled, LOW);
      digitalWrite(spyRTled,LOW);
      digitalWrite(spyHTled,HIGH);
      digitalWrite(spyFCled, LOW);
      delay(250);
      digitalWrite(spyHTled,LOW);
      digitalWrite(spyFCled, HIGH);
      delay(250);
    }
    break;
  default:
    break;
  }
  Serial.print("C = "); 
  Serial.println(thermocouple.readCelsius());
  delay(1000);
}

Qualche suggerimento?

Cosa intendi per piú performante?
Togli il delay().
Ciao Uwe

Secondo me ottieni un incremento delle prestazioni (qualche microsecondo) se sostituisci gli switch case con degli if else.

Grazie Uwe,

uwefed:
Cosa intendi per piú performante?
Togli il delay().
Ciao Uwe

siccome è il mio primo progetto e sono agli inizi con Arduino intendevo riuscire, se possibile, a snellire lo sketch o migliorarlo per far si che possa lavorare meglio.
ma quale delay() dovrei togliere?

Grazie anche a te PaoloP,

PaoloP:
Secondo me ottieni un incremento delle prestazioni (qualche microsecondo) se sostituisci gli switch case con degli if else.

devo dire però che utilizzando if else al posto dello switch per gli interruttori mi sono scontrato con dei problemi, ho notato che con switch la distinzione fra le due "strade" che può prendere il programma è più definita rispetto all' if else che mi ha infatti costretto ad inserire il relè per bypassare il comando del relè temporizzato (cosa che ho comunque tenuto per una "sicurezza" in più) dato che pur escludendolo con if els alla pressione del pulsante il delay del potenziometro continuava a produrre i suoi effetti sul relè, cosa che con switch non si è verificata.

mi sembra quindi di capire di aver realizzato un buon progetto!!
mi sento orgoglioso!!
grazie ancora