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??