This commit is contained in:
jp.av.dev 2021-07-06 22:06:33 -04:00
parent 4808d4db46
commit 1e5d3db97c

View File

@ -1,158 +1,100 @@
#include <Servo.h> #include <Servo.h>
#include <RTClib.h> #include <RTClib.h>
Servo myservo_X; Servo myservo_X;
RTC_DS3231 reloj; RTC_DS3231 reloj;
volatile DateTime fecha; volatile DateTime fecha;
unsigned long intervalo_loop=5000; unsigned long intervalo_loop=5000;
unsigned long previoMillisTermo=0; unsigned long previoMillisTermo=0;
unsigned long previoMillisLoop=0; unsigned long previoMillisLoop=0;
unsigned long actualMillis; unsigned long actualMillis;
byte horaON = 5; byte horaON = 5;
byte horaOFF = 7; byte horaOFF = 7;
byte cont=0; byte cont=0;
bool estado_termo; bool estado_termo;
bool espera; bool espera;
bool start; bool start;
void setup() { void setup() {
myservo_X.attach(9); myservo_X.attach(9);
Serial.begin(115200); Serial.begin(115200);
reloj.begin(); reloj.begin();
start=1; start=1;
estado_termo = 0; estado_termo = 0;
//reloj.adjust(DateTime(__DATE__, __TIME__)); }
} //reloj.adjust(DateTime(__DATE__, __TIME__));
void loop() {
void loop() { if(start) {
if(start) { myservo_X.write(30);
myservo_X.write(30); start=0;
start=0; fecha = reloj.now();
fecha = reloj.now(); printFecha();
printFecha(); }
} actualMillis = millis();
actualMillis = millis(); if ((unsigned long)(actualMillis - previoMillisLoop) >= intervalo_loop) {
if ((unsigned long)(actualMillis - previoMillisLoop) >= intervalo_loop) { fecha = reloj.now();
fecha = reloj.now(); if((fecha.hour() >= horaON) && (fecha.hour() < horaOFF) && (estado_termo == 0)) {
if((fecha.hour() >= horaON) && (fecha.hour() < horaOFF) && (estado_termo == 0)) { termoON();
termoON(); } else if(((fecha.hour() < horaON) || (fecha.hour() >= horaOFF)) && (estado_termo == 1)) {
} else if(((fecha.hour() < horaON) || (fecha.hour() >= horaOFF)) && (estado_termo == 1)) { termoOFF();
termoOFF(); }
} previoMillisLoop = millis();
previoMillisLoop = millis(); }
} }
}
// Secuencia de encendido y apagado de Caldera
// Secuencia de encendido y apagado de Caldera void termoON() {
void termoON() { myservo_X.write(120);
myservo_X.write(120); espera = 0;
espera = 0; cont = 0;
cont = 0; previoMillisTermo = millis();
previoMillisTermo = millis(); do{
do{ actualMillis = millis();
actualMillis = millis(); if(espera == 0) {
if(espera == 0) { if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) {
if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) { myservo_X.write(110);
myservo_X.write(110); previoMillisTermo = millis();
previoMillisTermo = millis(); espera = 1;
espera = 1; cont++;
cont++; }
} }
} if(espera == 1) {
if(espera == 1) { if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) {
if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) { myservo_X.write(120);
myservo_X.write(120); previoMillisTermo = millis();
previoMillisTermo = millis(); espera = 0;
espera = 0; cont++;
cont++; }
} }
} } while (cont < 4);
} while (cont < 4); estado_termo = 1;
estado_termo = 1; }
}
void termoOFF() {
void termoOFF() { myservo_X.write(45);
myservo_X.write(45); espera = 0;
espera = 0; cont = 0;
cont = 0; previoMillisTermo = millis();
previoMillisTermo = millis(); do{
do{ actualMillis = millis();
actualMillis = millis(); if(espera == 0) {
if(espera == 0) { if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) {
if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) { myservo_X.write(62);
myservo_X.write(62); previoMillisTermo = millis();
previoMillisTermo = millis(); espera = 1;
espera = 1; cont++;
cont++; }
} }
} if(espera == 1) {
if(espera == 1) { if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) {
if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) { myservo_X.write(45);
myservo_X.write(45); previoMillisTermo = millis();
previoMillisTermo = millis(); espera = 0;
espera = 0; cont++;
cont++; }
} }
} } while (cont < 4);
} while (cont < 4); estado_termo = 0;
estado_termo = 0; }
}
//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'));
}