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 posON2;
byte posOFF1; byte posOFF1;
byte posOFF2; byte posOFF2;
byte cont=0; byte cont;
bool estado_termo; bool estado_termo;
bool espera; bool espera;
bool start; bool start;
void setup() { void setup() {
Serial.begin(9600);
myservo_X.attach(9); myservo_X.attach(9);
reloj.begin(); 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; estado_termo=0;
setVarControl();
variablesControl(); variablesControl();
start=1; start=1;
ajustaReloj(2021, 7, 8, 5, 30, 0);
//reloj.adjust(DateTime(__DATE__, __TIME__)); //reloj.adjust(DateTime(__DATE__, __TIME__));
} }
@ -50,13 +53,16 @@ void loop() {
} }
actualMillis = millis(); actualMillis = millis();
if ((unsigned long)(actualMillis - previoMillisLoop) >= intervalo_loop) { if ((unsigned long)(actualMillis - previoMillisLoop) >= intervalo_loop) {
printFecha();
fecha = reloj.now(); fecha = reloj.now();
if((((fecha.hour() >= horaON1) && (fecha.hour() < horaOFF1)) || if((((fecha.hour() >= horaON1) && (fecha.hour() < horaOFF1)) ||
((fecha.hour() >= horaON2) && (fecha.hour() < horaOFF2))) && (estado_termo==0)) { ((fecha.hour() >= horaON2) && (fecha.hour() < horaOFF2))) && (estado_termo==0)) {
termoACC(posON1, posON2); termoACC(posON1, posON2);
Serial.println("TERMO ON");
} else if((((fecha.hour() < horaON1) || (fecha.hour() >= horaOFF1)) && } else if((((fecha.hour() < horaON1) || (fecha.hour() >= horaOFF1)) &&
((fecha.hour() < horaON2) || (fecha.hour() >= horaOFF2))) && (estado_termo==1)) { ((fecha.hour() < horaON2) || (fecha.hour() >= horaOFF2))) && (estado_termo==1)) {
termoACC(posOFF1, posOFF2); termoACC(posOFF1, posOFF2);
Serial.println("TERMO OFF");
} }
previoMillisLoop = millis(); previoMillisLoop = millis();
} }
@ -91,31 +97,105 @@ void termoACC(byte pos1, byte pos2) {
// provisorio, case config para hora, horas o dias, posiciones, etc. // provisorio, case config para hora, horas o dias, posiciones, etc.
void setVarControl() { void setVarControl() {
horaON1 = 5; //horaON1 = 5;
horaOFF2 = 7; //horaOFF1 = 7;
horaON2 = 16; //horaON2 = 16;
horaOFF2 = 18; //horaOFF2 = 18;
posON1 = 120; //posON1 = 120;
posON2 = 110; //posON2 = 110;
posOFF1 = 45; //posOFF1 = 45;
posOFF2 = 62; //posOFF2 = 62;
EEPROM.put(dirHoraON1, horaON1); //EEPROM.put(dirHoraON1, horaON1);
EEPROM.put(dirHoraOFF1, horaOFF1); //EEPROM.put(dirHoraOFF1, horaOFF1);
EEPROM.put(dirHoraON2, horaON2); //EEPROM.put(dirHoraON2, horaON2);
EEPROM.put(dirHoraOFF2, horaOFF2); //EEPROM.put(dirHoraOFF2, horaOFF2);
EEPROM.put(dirPosON1,posON1); //EEPROM.put(dirPosON1,posON1);
EEPROM.put(dirPosON2, posON2); //EEPROM.put(dirPosON2, posON2);
EEPROM.put(dirPosOFF1, posOFF1); //EEPROM.put(dirPosOFF1, posOFF1);
EEPROM.put(dirPosOFF2, posOFF2); //EEPROM.put(dirPosOFF2, posOFF2);
} }
void variablesControl() { void variablesControl() {
horaON1 = EEPROM.read(dirHoraON1); horaON1 = EEPROM.read(dirHoraON1);
horaOFF1 = EEPROM.read(dirHoraOFF2); horaOFF1 = EEPROM.read(dirHoraOFF1);
horaON2 = EEPROM.read(dirHoraON2); horaON2 = EEPROM.read(dirHoraON2);
horaOFF2 = EEPROM.read(dirHoraOFF2); horaOFF2 = EEPROM.read(dirHoraOFF2);
posON1 = EEPROM.read(dirPosON1); posON1 = EEPROM.read(dirPosON1);
posON2 = EEPROM.read(dirPosON2); posON2 = EEPROM.read(dirPosON2);
posOFF1 = EEPROM.read(dirPosOFF1); posOFF1 = EEPROM.read(dirPosOFF1);
posOFF2 = EEPROM.read(dirPosOFF2); 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 <Servo.h>
#include <RTClib.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; Servo myservo_X;
RTC_DS3231 reloj; RTC_DS3231 reloj;
@ -9,11 +19,15 @@ 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 horaON1;
byte horaOFF=7; byte horaOFF1;
byte horaON2=16; byte horaON2;
byte horaOFF2=18; byte horaOFF2;
byte cont=0; byte posON1;
byte posON2;
byte posOFF1;
byte posOFF2;
byte cont;
bool estado_termo; bool estado_termo;
bool espera; bool espera;
bool start; bool start;
@ -22,46 +36,40 @@ void setup() {
Serial.begin(9600); Serial.begin(9600);
myservo_X.attach(9); myservo_X.attach(9);
reloj.begin(); reloj.begin();
start=1; //setVarControl(); // Provisorio, a dividir segun control horario, posiciones. futuras vars
estado_termo=0; estado_termo=0;
DateTime dt(2021, 7, 5, 5, 32, 0); setVarControl();
reloj.adjust(dt); variablesControl();
} start=1;
ajustaReloj(2021, 7, 8, 5, 30, 0);
//reloj.adjust(DateTime(__DATE__, __TIME__)); //reloj.adjust(DateTime(__DATE__, __TIME__));
}
void loop() { void loop() {
if(start) { if(start) {
Serial.println("Inicio");
myservo_X.write(30); myservo_X.write(30);
start=0; start=0;
fecha=reloj.now(); fecha=reloj.now();
} }
actualMillis = millis(); actualMillis = millis();
if ((unsigned long)(actualMillis - previoMillisLoop) >= intervalo_loop) { if ((unsigned long)(actualMillis - previoMillisLoop) >= intervalo_loop) {
printFecha();
fecha = reloj.now(); 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)) { ((fecha.hour() >= horaON2) && (fecha.hour() < horaOFF2))) && (estado_termo==0)) {
Serial.print("pre ON : "); termoACC(posON1, posON2);
Serial.println((String)estado_termo); Serial.println("TERMO ON");
termoON(); } else if((((fecha.hour() < horaON1) || (fecha.hour() >= horaOFF1)) &&
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)) { ((fecha.hour() < horaON2) || (fecha.hour() >= horaOFF2))) && (estado_termo==1)) {
Serial.print("pre OFF : "); termoACC(posOFF1, posOFF2);
Serial.println((String)estado_termo); Serial.println("TERMO OFF");
termoOFF();
Serial.print("post OFF : ");
Serial.println((String)estado_termo);
} }
previoMillisLoop = millis(); previoMillisLoop = millis();
} }
} }
// Secuencias de encendido y apagado de Caldera void termoACC(byte pos1, byte pos2) {
void termoON() { myservo_X.write(pos1);
myservo_X.write(120);
espera=0; espera=0;
cont=0; cont=0;
previoMillisTermo=millis(); previoMillisTermo=millis();
@ -69,7 +77,7 @@ void termoON() {
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(pos2);
previoMillisTermo=millis(); previoMillisTermo=millis();
espera=1; espera=1;
cont++; cont++;
@ -77,43 +85,61 @@ void termoON() {
} }
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(pos1);
previoMillisTermo=millis(); previoMillisTermo=millis();
espera=0; espera=0;
cont++; cont++;
} }
} }
} while (cont<4); } while (cont<4);
estado_termo=1; estado_termo=!estado_termo;
} }
void termoOFF() { // provisorio, case config para hora, horas o dias, posiciones, etc.
myservo_X.write(45); void setVarControl() {
espera=0; //horaON1 = 5;
cont=0; //horaOFF1 = 7;
previoMillisTermo=millis(); //horaON2 = 16;
do{ //horaOFF2 = 18;
actualMillis=millis(); //posON1 = 120;
if(espera==0) { //posON2 = 110;
if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) { //posOFF1 = 45;
myservo_X.write(62); //posOFF2 = 62;
previoMillisTermo=millis(); //EEPROM.put(dirHoraON1, horaON1);
espera=1; //EEPROM.put(dirHoraOFF1, horaOFF1);
cont++; //EEPROM.put(dirHoraON2, horaON2);
} //EEPROM.put(dirHoraOFF2, horaOFF2);
} //EEPROM.put(dirPosON1,posON1);
if(espera==1) { //EEPROM.put(dirPosON2, posON2);
if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) { //EEPROM.put(dirPosOFF1, posOFF1);
myservo_X.write(45); //EEPROM.put(dirPosOFF2, posOFF2);
previoMillisTermo=millis();
espera=0;
cont++;
}
}
} while (cont<4);
estado_termo=0;
} }
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 //En caso de ser necesario mostrar hora, este codigo añade un 0 a los valores menores a 10
String getHora(char var) { String getHora(char var) {