diff --git a/caldera_rata/caldera_rata.ino b/caldera_rata/caldera_rata.ino index f381992..9061b83 100644 --- a/caldera_rata/caldera_rata.ino +++ b/caldera_rata/caldera_rata.ino @@ -27,18 +27,21 @@ byte posON1; byte posON2; byte posOFF1; byte posOFF2; -byte cont=0; +byte cont; bool estado_termo; bool espera; bool start; void setup() { + Serial.begin(9600); myservo_X.attach(9); reloj.begin(); - setVarControl(); // Provisorio, a dividir segun control horario, posiciones. futuras vars + //setVarControl(); // Provisorio, a dividir segun control horario, posiciones. futuras vars estado_termo=0; + setVarControl(); variablesControl(); start=1; + ajustaReloj(2021, 7, 8, 5, 30, 0); //reloj.adjust(DateTime(__DATE__, __TIME__)); } @@ -50,13 +53,16 @@ void loop() { } actualMillis = millis(); if ((unsigned long)(actualMillis - previoMillisLoop) >= intervalo_loop) { + printFecha(); fecha = reloj.now(); if((((fecha.hour() >= horaON1) && (fecha.hour() < horaOFF1)) || ((fecha.hour() >= horaON2) && (fecha.hour() < horaOFF2))) && (estado_termo==0)) { termoACC(posON1, posON2); + Serial.println("TERMO ON"); } else if((((fecha.hour() < horaON1) || (fecha.hour() >= horaOFF1)) && ((fecha.hour() < horaON2) || (fecha.hour() >= horaOFF2))) && (estado_termo==1)) { termoACC(posOFF1, posOFF2); + Serial.println("TERMO OFF"); } previoMillisLoop = millis(); } @@ -91,31 +97,105 @@ void termoACC(byte pos1, byte pos2) { // provisorio, case config para hora, horas o dias, posiciones, etc. void setVarControl() { - horaON1 = 5; - horaOFF2 = 7; - horaON2 = 16; - horaOFF2 = 18; - posON1 = 120; - posON2 = 110; - posOFF1 = 45; - posOFF2 = 62; - EEPROM.put(dirHoraON1, horaON1); - EEPROM.put(dirHoraOFF1, horaOFF1); - EEPROM.put(dirHoraON2, horaON2); - EEPROM.put(dirHoraOFF2, horaOFF2); - EEPROM.put(dirPosON1,posON1); - EEPROM.put(dirPosON2, posON2); - EEPROM.put(dirPosOFF1, posOFF1); - EEPROM.put(dirPosOFF2, posOFF2); + //horaON1 = 5; + //horaOFF1 = 7; + //horaON2 = 16; + //horaOFF2 = 18; + //posON1 = 120; + //posON2 = 110; + //posOFF1 = 45; + //posOFF2 = 62; + //EEPROM.put(dirHoraON1, horaON1); + //EEPROM.put(dirHoraOFF1, horaOFF1); + //EEPROM.put(dirHoraON2, horaON2); + //EEPROM.put(dirHoraOFF2, horaOFF2); + //EEPROM.put(dirPosON1,posON1); + //EEPROM.put(dirPosON2, posON2); + //EEPROM.put(dirPosOFF1, posOFF1); + //EEPROM.put(dirPosOFF2, posOFF2); } void variablesControl() { horaON1 = EEPROM.read(dirHoraON1); - horaOFF1 = EEPROM.read(dirHoraOFF2); + horaOFF1 = EEPROM.read(dirHoraOFF1); horaON2 = EEPROM.read(dirHoraON2); horaOFF2 = EEPROM.read(dirHoraOFF2); posON1 = EEPROM.read(dirPosON1); posON2 = EEPROM.read(dirPosON2); posOFF1 = EEPROM.read(dirPosOFF1); posOFF2 = EEPROM.read(dirPosOFF2); + Serial.println("Variables: "); + Serial.println((String)horaON1); + Serial.println((String)horaOFF1); + Serial.println((String)horaON2); + Serial.println((String)horaOFF2); + Serial.println((String)posON1); + Serial.println((String)posON2); + Serial.println((String)posOFF1); + Serial.println((String)posOFF2); + +} + +void ajustaReloj(int ano, byte mes, byte dia, byte hra, byte mins, byte segs ) { + DateTime dt(ano, mes, dia, hra, mins, segs); + reloj.adjust(dt); +} + +//En caso de ser necesario mostrar hora, este codigo añade un 0 a los valores menores a 10 +String getHora(char var) { + switch (var) { + case 'h': + if(fecha.hour() < 10) { + return ('0'+(String)fecha.hour()); break; + } else { + return (String)fecha.hour();break; + } + case 'm': + if(fecha.minute() <10) { + return ('0'+(String)fecha.minute()); break; + } else { + return (String)fecha.minute();break; + } + case 's': + if(fecha.second() <10) { + return ('0'+(String)fecha.second()); break; + } else { + return (String)fecha.second();break; + } + case 'd': + if(fecha.day() <10) { + return ('0'+(String)fecha.day()); break; + } else { + return (String)fecha.day();break; + } + case 'n': + if(fecha.month() <10) { + return ('0'+(String)fecha.month()); break; + } else { + return (String)fecha.month();break; + } + case 'a': + if(fecha.year() <10) { + return ('0'+(String)fecha.year()); break; + } else { + return (String)fecha.year();break; + } + } +} + +// Enviar hora y fecha por puerto serie +void printFecha() { + Serial.print(getHora('d')); + Serial.print("/"); + Serial.print(getHora('n')); + Serial.print("/"); + Serial.print(getHora('a')); + Serial.print(" "); + Serial.print(getHora('h')); + Serial.print(":"); + Serial.print(getHora('m')); + Serial.print(":"); + Serial.println(getHora('s')); + Serial.println("Día de la semana: "); + Serial.println((String)fecha.dayOfTheWeek()); } diff --git a/caldera_rata_deb/caldera_rata_deb.ino b/caldera_rata_deb/caldera_rata_deb.ino index 5b9a11f..9061b83 100644 --- a/caldera_rata_deb/caldera_rata_deb.ino +++ b/caldera_rata_deb/caldera_rata_deb.ino @@ -1,5 +1,15 @@ #include #include +#include + +#define dirHoraON1 0 +#define dirHoraOFF1 1 +#define dirHoraON2 2 +#define dirHoraOFF2 3 +#define dirPosON1 4 +#define dirPosON2 5 +#define dirPosOFF1 6 +#define dirPosOFF2 7 Servo myservo_X; RTC_DS3231 reloj; @@ -9,11 +19,15 @@ unsigned long intervalo_loop=5000; unsigned long previoMillisTermo=0; unsigned long previoMillisLoop=0; unsigned long actualMillis; -byte horaON=5; -byte horaOFF=7; -byte horaON2=16; -byte horaOFF2=18; -byte cont=0; +byte horaON1; +byte horaOFF1; +byte horaON2; +byte horaOFF2; +byte posON1; +byte posON2; +byte posOFF1; +byte posOFF2; +byte cont; bool estado_termo; bool espera; bool start; @@ -22,73 +36,40 @@ void setup() { Serial.begin(9600); myservo_X.attach(9); reloj.begin(); - start=1; + //setVarControl(); // Provisorio, a dividir segun control horario, posiciones. futuras vars estado_termo=0; - DateTime dt(2021, 7, 5, 5, 32, 0); - reloj.adjust(dt); + setVarControl(); + variablesControl(); + start=1; + ajustaReloj(2021, 7, 8, 5, 30, 0); + //reloj.adjust(DateTime(__DATE__, __TIME__)); } -//reloj.adjust(DateTime(__DATE__, __TIME__)); - void loop() { if(start) { - Serial.println("Inicio"); myservo_X.write(30); start=0; fecha=reloj.now(); } actualMillis = millis(); if ((unsigned long)(actualMillis - previoMillisLoop) >= intervalo_loop) { + printFecha(); fecha = reloj.now(); - if((((fecha.hour() >= horaON) && (fecha.hour() < horaOFF)) || + if((((fecha.hour() >= horaON1) && (fecha.hour() < horaOFF1)) || ((fecha.hour() >= horaON2) && (fecha.hour() < horaOFF2))) && (estado_termo==0)) { - Serial.print("pre ON : "); - Serial.println((String)estado_termo); - termoON(); - Serial.print("post ON : "); - Serial.println((String)estado_termo); - } else if((((fecha.hour() < horaON) || (fecha.hour() >= horaOFF)) && - ((fecha.hour() < horaON2) || (fecha.hour() >= horaOFF2))) && (estado_termo==1)) { - Serial.print("pre OFF : "); - Serial.println((String)estado_termo); - termoOFF(); - Serial.print("post OFF : "); - Serial.println((String)estado_termo); + termoACC(posON1, posON2); + Serial.println("TERMO ON"); + } else if((((fecha.hour() < horaON1) || (fecha.hour() >= horaOFF1)) && + ((fecha.hour() < horaON2) || (fecha.hour() >= horaOFF2))) && (estado_termo==1)) { + termoACC(posOFF1, posOFF2); + Serial.println("TERMO OFF"); } previoMillisLoop = millis(); } } - -// Secuencias de encendido y apagado de Caldera -void termoON() { - myservo_X.write(120); - espera=0; - cont=0; - previoMillisTermo=millis(); - do{ - actualMillis=millis(); - if(espera==0) { - if((unsigned long)(actualMillis - previoMillisTermo) >= 500) { - myservo_X.write(110); - previoMillisTermo=millis(); - espera=1; - cont++; - } - } - if(espera==1) { - if((unsigned long)(actualMillis - previoMillisTermo) >= 500) { - myservo_X.write(120); - previoMillisTermo=millis(); - espera=0; - cont++; - } - } - } while(cont<4); - estado_termo=1; -} -void termoOFF() { - myservo_X.write(45); +void termoACC(byte pos1, byte pos2) { + myservo_X.write(pos1); espera=0; cont=0; previoMillisTermo=millis(); @@ -96,7 +77,7 @@ void termoOFF() { actualMillis=millis(); if(espera==0) { if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) { - myservo_X.write(62); + myservo_X.write(pos2); previoMillisTermo=millis(); espera=1; cont++; @@ -104,16 +85,61 @@ void termoOFF() { } if(espera==1) { if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) { - myservo_X.write(45); + myservo_X.write(pos1); previoMillisTermo=millis(); espera=0; cont++; } } } while (cont<4); - estado_termo=0; + estado_termo=!estado_termo; } +// provisorio, case config para hora, horas o dias, posiciones, etc. +void setVarControl() { + //horaON1 = 5; + //horaOFF1 = 7; + //horaON2 = 16; + //horaOFF2 = 18; + //posON1 = 120; + //posON2 = 110; + //posOFF1 = 45; + //posOFF2 = 62; + //EEPROM.put(dirHoraON1, horaON1); + //EEPROM.put(dirHoraOFF1, horaOFF1); + //EEPROM.put(dirHoraON2, horaON2); + //EEPROM.put(dirHoraOFF2, horaOFF2); + //EEPROM.put(dirPosON1,posON1); + //EEPROM.put(dirPosON2, posON2); + //EEPROM.put(dirPosOFF1, posOFF1); + //EEPROM.put(dirPosOFF2, posOFF2); +} + +void variablesControl() { + horaON1 = EEPROM.read(dirHoraON1); + horaOFF1 = EEPROM.read(dirHoraOFF1); + horaON2 = EEPROM.read(dirHoraON2); + horaOFF2 = EEPROM.read(dirHoraOFF2); + posON1 = EEPROM.read(dirPosON1); + posON2 = EEPROM.read(dirPosON2); + posOFF1 = EEPROM.read(dirPosOFF1); + posOFF2 = EEPROM.read(dirPosOFF2); + Serial.println("Variables: "); + Serial.println((String)horaON1); + Serial.println((String)horaOFF1); + Serial.println((String)horaON2); + Serial.println((String)horaOFF2); + Serial.println((String)posON1); + Serial.println((String)posON2); + Serial.println((String)posOFF1); + Serial.println((String)posOFF2); + +} + +void ajustaReloj(int ano, byte mes, byte dia, byte hra, byte mins, byte segs ) { + DateTime dt(ano, mes, dia, hra, mins, segs); + reloj.adjust(dt); +} //En caso de ser necesario mostrar hora, este codigo añade un 0 a los valores menores a 10 String getHora(char var) {