Como modificar la temperatura con un Encoder rotativo

Hola, en mi proyecto de control de temperatura tengo una variable llamada "tempDeseadaH1" y quiero modificarla con un encoder rotativo con pulsador, pero no he encontrado la forma de hacer que funcione y que se muestre en pantalla.
Utilizo distintas librerías como "LiquidMenu", "LiquidCrystal_I2C", "OneWire" y "DallasTemperature".

Dejo acá lo que utilizo y como tengo declarado cada variable:

#define outputA 6
#define outputB 7
#define sw 4

int aState;
int aLastState;
void fn_atras();
void fn_temp();
void fn_H1();
void fn_H2();
void fn_H3();
void fn_C();

float temp0 = sensorDS18B20.getTempCByIndex(0);
float temp1 = sensorDS18B20.getTempCByIndex(1);
float temp2 = sensorDS18B20.getTempCByIndex(2);
float temp3 = sensorDS18B20.getTempCByIndex(3);
float tempDeseadaH1, tempDeseadaH2, tempDeseadaH3,
      tempDeseadaC, tempAgua;
unsigned long valorEncoder = 0;  


// Defino Pantalla 1
LiquidLine linea1(0, 0," Hab. 1: ", temp0, " C");
LiquidLine linea2(0, 1," Hab. 2: ", temp1, " C");
LiquidLine linea3(0, 2," Hab. 3: ", temp2, " C");
LiquidLine linea4(0, 3," Living: ", temp3, " C");

LiquidScreen pantalla1(linea1, linea2, linea3, linea4);

//Defino panalla que modifica la temperatura
LiquidLine linea1_2(0, 0, "Temp. deseada");
LiquidLine linea2_2(1, 1, fn_temp);
LiquidLine linea3_2(1, 0, "Atras");
LiquidScreen pantallaModTemp(linea1_2, linea2_2, linea3_2);

LiquidMenu menu(lcd, pantalla1, pantallaModTemp);

Acá esta mi VoidSetup para el control del botón:

pinMode(sw, INPUT_PULLUP);

  
  menu.init();
  lcd.init();
  lcd.begin(16, 2);
  lcd.backlight();
  
  linea1.set_focusPosition(Position::LEFT);
  linea2.set_focusPosition(Position::LEFT);
  linea3.set_focusPosition(Position::LEFT);
  linea4.set_focusPosition(Position::LEFT);
  
  linea1.attach_function(1, fn_H1);
  linea2.attach_function(1, fn_H2);
  linea3.attach_function(1, fn_H3);
  linea4.attach_function(1, fn_C);
  menu.add_screen(pantalla1);

  
  linea2_2.set_focusPosition(Position::LEFT);
  linea3_2.set_focusPosition(Position::LEFT);
  
  linea2_2.attach_function(1, fn_temp);
  linea3_2.attach_function(1, fn_atras);
  menu.add_screen(pantallaModTemp);

  
  pantalla1.set_displayLineCount(2);
  pantallaModTemp.set_displayLineCount(2);

  menu.set_focusedLine(0);

  Serial.begin(9600);
  sensorDS18B20.begin();

Acá esta lo que debería hacer la variable "tempDeseadaH1":

if (tempH1 < tempDeseadaH1 && tempAgua > 40) {
    
    digitalWrite(pinReleElectrovalvula, LOW);
    digitalWrite(pinReleBombaAgua, LOW);
  } else if (tempH1 > tempDeseadaH1) {
    
    digitalWrite(pinReleBombaAgua, HIGH);
    digitalWrite(pinReleElectrovalvula, HIGH);
  }

y Acá esta el la función para modificarlo:

void fn_temp() {
  switch (relee_seleccionado) {
    case 1:
      int tempDeseadaH1 = constrain(valorEncoder, 16, 32);
      break;
    case 2:
      int tempDeseadaH2 = constrain(valorEncoder, 16, 32);
      break;
    case 3:
      int tempDeseadaH3 = constrain(valorEncoder, 16, 32);
      break;
    case 4:
      int tempDeseadaC = constrain(valorEncoder, 16, 32);
      break;
  }
}

Si alguien sabe como hacerlo, podría darme algún consejo? Mas o menos que es lo que estoy haciendo mal o que es lo que esta pasando??

Por lo pronto, debes publicar tu código completo, no en partes, de modo que se puedan ver las interacciones que hay entre las instrucciones.

Por ejemplo, si esto está fuera de loop() o de alguna otra función, no te va a funcionar. Esta es una instrucción ejecutable que debe estar dentro de alguna función. Puede estar dentro de loop(), que es una función más.

Lo que estás haciendo mal es no publicar el código completo.

Moderador:
Te voy a explicar lo que ocurre cuando no publicas un código completo.
Ante todo, nosotros no podemos entender que estas haciendo bien o mal sin poder ver el total del código y/o reproducirlo, compilarlo, analizarlo por nuestra cuenta si fuera necesario, o incluso simularlo como muchas veces hacemos.
Por esta razón puede que tu analísis no sea correcto, y si lo fuera ya le habrías encontrado la solución.
Asi que no dilates las cosas y has un nuevo post con toda la información.
Todos los que acá ayudamos leemos lo que nos dices y luego pasamos al código y sacamos nuestras conclusiones.
Gracias por tu compresión.

Perdon, ahi abri el tema de nuevo con el codigo completo, y la libreria que hay que modificar: Tema nuevo

Moderador

Tienes una 1ra y ultima advertencia por doble posteo, cometes un doble posteo nuevo, y recibirás una sanción por reiteración de faltas a las normas.
Toda duda o consulta la haces por privado.