EEPROM cargada

This commit is contained in:
jp.av.dev 2021-07-08 21:50:59 -04:00
parent 3389c25f66
commit 76d3ebfafe
2 changed files with 182 additions and 76 deletions

View File

@ -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());
}

View File

@ -1,5 +1,15 @@
#include <Servo.h>
#include <RTClib.h>
#include <EEPROM.h>
#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) {