Buenas noches.
Estoy configurando una calefacción con Arduino y tengo varias dudas con el código que ya no se como solucionar.
Primero:
Opción manual → puede actuar de varias maneras OFF, boiler 40, boiler 60 y calefacción
Opción auto-> quiero que se active calefacción a la hora programada.
Requisitos:
- si está activada la programación, da igual la función elegida en manual que a la hora fijada, debe ponerse la calefacción.
- una vez finalizado el periodo programado debe ponerse de nuevo lo seleccionado en manual.
- debe aparecer en la pantalla lo que se este pasando, es decir, off, boiler 40, boiler 60, calefacción. EN otra linea manual o auto ON o auto OFF.
Es un problema de concepto que no lo veo claro como atacarlo.
tengo en código en tres pestañas, las pongo aquí, y el enlace a GitHub.
https://github.com/AnakinSpain/Anakin_truma
Gracias.
PD: NO me deja copiar código, porque es muy extenso. copio y pego fragmentos.
void pantalla1() //PANTALLA DE INICIO
{
Data d = rtc.getData();
lcd.setCursor(0,0);
lcd.print( d.toString("d/m/y H:i:s") ); //Imprime en pantalla la hora y fecha
lcd.setCursor(0,1); lcd.print("SET:"); lcd.print(temp_confort);
lcd.setCursor(13,1); lcd.print(temp_habit);lcd.print("C");
lcd.setCursor(0,2);
if (funcion==1) { lcd.print("OFF ");} else // Si hemos seleccionado apagado
if (funcion==2) { lcd.print("BOILER 40 ");} else // Si hemos seleccionado boiler a 40º
if (funcion==3) { lcd.print("BOILER 60 ");} else // Si hemos seleccionado boiler a 60º
if (funcion==4) { lcd.print("CALEFACCION");} // Si hemos seleccionado calefaccion
lcd.setCursor(13,2); lcd.print(hum_habit);lcd.print("%");
lcd.setCursor(0,3);
if (modo==true) {lcd.print("MANUAL");} else
if (modo==false) {
if (estado==true) {lcd.print("AUTO ON ");} else
{lcd.print("AUTO OFF");}
}
lcd.setCursor(15,3);
if (activar==true){ (lcd.write(2));} else {lcd.print(" ");}
encoderSW_bounce.update();
if (encoderSW_bounce.fallingEdge())
{ if (!lcd_encendido) {lcd.backlight(); lcd_encendido=true;delay(500); Serial.print("pulso enciende");}//Si pulsamos entramos
else if (lcd_encendido) {lcd.noBacklight(); lcd_encendido=false;delay(500);} Serial.print("pulso apaga");//Si
}
}
//*********** PANTALLA AJUSTE MODO *******************************************
void modo_func()
{
boolean set_modo = false;
lcd.clear();
lcd.setCursor(2,0);
lcd.print("<SELEC. MODO>");
menu= 0 ; //Inicializamos variables para ENCODER
lastmenu = 0;
while (set_modo == false){
rotating = true; //Establecemos el debounce
if(menu > lastmenu){ //Si menu es mayor que last menu sumamos valor
funcion++;
funcion=constrain(funcion,1,4); //Limite de variable 1-4
lastmenu=menu;
}
else if (menu < lastmenu){ //Si menu es menor que last menu restamos valor
funcion--;
funcion=constrain(funcion,1,4); //Limite de variable 1-4
lastmenu=menu;
}
else if (menu == lastmenu){ //Si nada cambia mantenemos
funcion=funcion;
}
lcd.setCursor(1,1);
if (funcion==1) { lcd.print("OFF ");} else // Si hemos seleccionado apagado
if (funcion==2) { lcd.print("BOILER 40 ");} else // Si hemos seleccionado boiler a 40º
if (funcion==3) { lcd.print("BOILER 60 ");} else // Si hemos seleccionado boiler a 60º
if (funcion==4) { lcd.print("CALEFACCION");} // Si hemos seleccionado calefaccion
encoderSW_bounce.update(); //Consultamos si hemos pulsado
if (encoderSW_bounce.fallingEdge()){ //Si pulsamos el boton salimos de ajustar hora y pasamos a minutos
set_modo = true ;
Serial.print(funcion);
}
}
grabar_configuracion(); //Llamamos a la funcion para guardar en la EEPROM
lcd.setCursor(11,3);lcd.print("GRABADO!"); delay(2000);
}
void programacion()
{
//int funcion_anterior;
Data d = rtc.getData();
state = d.isBetween(calH_ON,calM_ON, calH_OFF,calM_OFF);
if ((activar==true) && (state==true )) // si esta dentro de lo programado, es decir state = true
{
(funcion=4); // cambiamos valor variable para encender calefaccion
(estado=true); // cambiamos valor variable para que pase a auto ON
} else
if (state==false)
{ (funcion=1); (estado=false);
}
No se si se entenderá lo suficiente.