Estoy intentando hacer un código en el que utilizo un menú con liquidMenu y quiero ver la temperatura de varias habitaciones, aunque da error.
Aquí adjunto el código y el mensaje de error, ya no sé qué hacerle.
	
	
	
		
Aquí el error...

Si me podieran ayudar, se los agradecería muchísimo.
				
			Aquí adjunto el código y el mensaje de error, ya no sé qué hacerle.
		C++:
	
	#include <LiquidCrystal_I2C.h>
#include <LiquidMenu.h>
#include <OneWire.h>
#include <DallasTemperature.h>
LiquidCrystal_I2C lcd(0x27, 16,2);
//Definimos sensores
  const int pinDatosDQ = 3;
  OneWire oneWireObjeto(pinDatosDQ);
  DallasTemperature sensorDS18B20(&oneWireObjeto);
//Definimos relees
  const int calefon = 8;
  const int electH1 = 9;
  const int electH2 = 10;
  const int electH3 = 11;
  const int electC = 12;
  const int bomba = 13;
//Nuestra forma de elegir relee
int relee_seleccionado=0;
//Defino Encoder
  #define outputA 6
  #define outputB 7
  #define sw 4
 
int aState;
int aLastState;
// Defino Pantalla 1
LiquidLine linea1(0, 0);
linea1.print("Hab.1: ");
linea1.print(sensorDS18B20.getTempCByIndex(0));
linea1.print(" C.");
LiquidLine linea2(0, 1);
linea2.print("Hab.2: ");
linea2.print(sensorDS18B20.getTempCByIndex(1));
linea2.print(" C.");
LiquidLine linea3(0, 2);
linea3.print("Hab.3: ");
linea3.print(sensorDS18B20.getTempCByIndex(2));
linea3.print(" C.");
LiquidLine linea4(0, 3);
linea4.print("Living: ");
linea4.print(sensorDS18B20.getTempCByIndex(3));
linea4.print(" 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);
void setup() {
  pinMode(sw.INPUT_PULLUP);
  lcd.begin(16,2);
  lcd.backlight();
  menu.init();
  //Indicador de posiscion
  linea1.set_focusPosition(Position::LEFT);
  linea2.set_focusPosition(Position::LEFT);
  linea3.set_focusPosition(Position::LEFT);
  linea4.set_focusPosition(Position::LEFT);
  //Funcion de cada linea
  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);
  //Indicador de posiscion
  linea2_2.set_focusPosition(Position::LEFT);
  linea3_2.set_focusPosition(Position::LEFT);
  //Funcion de cada linea
  linea2_2.attach_function(1, fn_temp);
  linea3_2.attach_function(1, fn_atras);
  menu.add_screen(pantallaModTemp);
  //Se indicará la cantidad de lineas de cada pantalla
  pantalla1.set_displayLineCount(2);
  pantallaModTemp.set_displayLineCount(2);
 
  menu.set_focusedLine(0);
  Serial.begin(9600);
  sensorDS18B20.begin();
  pinMode(calefon, OUTPUT);
  pinMode(electH1, OUTPUT);
  pinMode(electH2, OUTPUT);
  pinMode(electH3, OUTPUT);
  pinMode(electC, OUTPUT);
  pinMode(bomba, OUTPUT);
  menu.update();
 
}
void loop(){
  sensorDS18B20.requestTemperatures();
  float tempH1 = sensorDS18B20.getTempCByIndex(0);
  float tempH2 = sensorDS18B20.getTempCByIndex(1);
  float tempH3 = sensorDS18B20.getTempCByIndex(2);
  float tempC = sensorDS18B20.getTempCByIndex(3);
  float agua = sensorDS18B20.getTempCByIndex(4);
  selectOption();
  aState=digitalRead(outputA);
    if (aState != aLastState){
      if (digitalRead(outputB) != aState){
        menu.switch_focus(false);
      } else{
        menu.switch_focus(true);
      }
      menu.update();
      aLastState=aState;
    }
  //Control de relee de habitación 1
    if (tempH1 < tempDeseadaH1 && tempAgua > 40) {
      // Enciende la electroválvula y la bomba de agua
      digitalWrite(pinReleElectrovalvula, LOW);
      digitalWrite(pinReleBombaAgua, LOW);
    } else if (tempH1 > tempDeseadaH1) {
      // Apaga la bomba de agua y cierra la electroválvula
      digitalWrite(pinReleBombaAgua, HIGH);
      digitalWrite(pinReleElectrovalvula, HIGH);
    }
  //Control de relee de habitación 2
    if (tempH2 < tempDeseadaH2 && tempAgua > 40) {
      // Enciende la electroválvula y la bomba de agua
      digitalWrite(pinReleElectrovalvula, LOW);
      digitalWrite(pinReleBombaAgua, LOW);
    } else if (tempH2 > tempDeseadaH2) {
      // Apaga la bomba de agua y cierra la electroválvula
      digitalWrite(pinReleBombaAgua, HIGH);
      digitalWrite(pinReleElectrovalvula, HIGH);
    }
  //Control de relee de habitación 3
    if (tempH3 < tempDeseadaH3 && tempAgua > 40) {
      // Enciende la electroválvula y la bomba de agua
      digitalWrite(pinReleElectrovalvula, LOW);
      digitalWrite(pinReleBombaAgua, LOW);
    } else if (tempH3 > tempDeseadaH3) {
      // Apaga la bomba de agua y cierra la electroválvula
      digitalWrite(pinReleBombaAgua, HIGH);
      digitalWrite(pinReleElectrovalvula, HIGH);
    }
  //Control de relee de comedor
    if (tempC < tempDeseadaC && tempAgua > 40) {
      // Enciende la electroválvula y la bomba de agua
      digitalWrite(pinReleElectrovalvula, LOW);
      digitalWrite(pinReleBombaAgua, LOW);
    } else if (tempC > tempDeseadaC) {
      // Apaga la bomba de agua y cierra la electroválvula
      digitalWrite(pinReleBombaAgua, HIGH);
      digitalWrite(pinReleElectrovalvula, HIGH);
    }
  // Control del calefón
    if (tempAgua < 40) {
      // Enciende el calefón
      digitalWrite(pinReleCalefon, LOW);
    } else if (tempAgua > 50) {
      // Apaga el calefón
      digitalWrite(pinReleCalefon, HIGH);
    }
    delay(1000);
}
//Funciones
  //Selección de datos
    void selectOption(){
      if(digitalRead(sw) == LOW){
        Serial.print("boton");
        menu.call_function(1);
        delay(500);
      }
    }
  //Pantalla 1
    void fn_h1{
      menu.change_screen(2);
      menu.set_focusedLine(1);
      relee_seleccionado = 1;
    }
    void fn_h2{
      menu.change_screen(2);
      menu.set_focusedLine(1);
      relee_seleccionado = 2;
    }
    void fn_h3{
      menu.change_screen(2);
      menu.set_focusedLine(1);
      relee_seleccionado = 3;
    }
    void fn_c{
      menu.change_screen(2);
      menu.set_focusedLine(1);
      relee_seleccionado = 4;
    }
  //Pantalla para modificar la temperatura
    void fn_temp{
      switch (relee_seleccionado){
        case 1:
          int tempDeseadaH1 = map(valorEncoder, 16, 32);
          }
          break;
        case 2:
          int tempDeseadaH2 = map(valorEncoder, 16, 32);
          break;
        case 3:
          int tempDeseadaH3 = map(valorEncoder, 16, 32);
          break;
        case 4:
          int tempDeseadaC = map(valorEncoder, 16, 32);
          break;
      }
    }
    void fn_atras{
      menu.change_screen(1);
      menu.set_focusedLine(0);
    }
Si me podieran ayudar, se los agradecería muchísimo.
			
				Última edición por un moderador: 
			
		
	
								
								
									
	
								
							
							 
   
				 
						 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		