Caldera-ino/caldera_rata/caldera_rata.ino

122 lines
3.1 KiB
Arduino
Raw Normal View History

2021-07-06 15:09:14 -04:00
#include <Servo.h>
#include <RTClib.h>
2021-07-08 02:05:10 -04:00
#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
2021-07-06 15:09:14 -04:00
Servo myservo_X;
RTC_DS3231 reloj;
volatile DateTime fecha;
unsigned long intervalo_loop=5000;
unsigned long previoMillisTermo=0;
unsigned long previoMillisLoop=0;
unsigned long actualMillis;
2021-07-08 02:05:10 -04:00
byte horaON1;
byte horaOFF1;
byte horaON2;
byte horaOFF2;
byte posON1;
byte posON2;
byte posOFF1;
byte posOFF2;
2021-07-06 15:09:14 -04:00
byte cont=0;
bool estado_termo;
bool espera;
bool start;
void setup() {
myservo_X.attach(9);
reloj.begin();
2021-07-08 02:05:10 -04:00
setVarControl(); // Provisorio, a dividir segun control horario, posiciones. futuras vars
estado_termo=0;
2021-07-08 02:05:10 -04:00
variablesControl();
start=1;
2021-07-07 19:21:36 -04:00
//reloj.adjust(DateTime(__DATE__, __TIME__));
2021-07-06 15:09:14 -04:00
}
void loop() {
if(start) {
myservo_X.write(30);
start=0;
fecha=reloj.now();
}
actualMillis = millis();
if ((unsigned long)(actualMillis - previoMillisLoop) >= intervalo_loop) {
fecha = reloj.now();
2021-07-08 02:05:10 -04:00
if((((fecha.hour() >= horaON1) && (fecha.hour() < horaOFF1)) ||
((fecha.hour() >= horaON2) && (fecha.hour() < horaOFF2))) && (estado_termo==0)) {
2021-07-08 02:05:10 -04:00
termoACC(posON1, posON2);
} else if((((fecha.hour() < horaON1) || (fecha.hour() >= horaOFF1)) &&
2021-07-07 16:04:23 -04:00
((fecha.hour() < horaON2) || (fecha.hour() >= horaOFF2))) && (estado_termo==1)) {
2021-07-08 02:05:10 -04:00
termoACC(posOFF1, posOFF2);
}
previoMillisLoop = millis();
2021-07-06 15:09:14 -04:00
}
}
2021-07-07 19:21:36 -04:00
void termoACC(byte pos1, byte pos2) {
myservo_X.write(pos1);
espera=0;
cont=0;
previoMillisTermo=millis();
do{
actualMillis=millis();
if(espera==0) {
if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) {
2021-07-07 19:21:36 -04:00
myservo_X.write(pos2);
previoMillisTermo=millis();
espera=1;
cont++;
}
}
if(espera==1) {
if ((unsigned long)(actualMillis - previoMillisTermo) >= 500) {
2021-07-07 19:21:36 -04:00
myservo_X.write(pos1);
previoMillisTermo=millis();
espera=0;
cont++;
}
}
} while (cont<4);
2021-07-07 19:21:36 -04:00
estado_termo=!estado_termo;
2021-07-06 15:09:14 -04:00
}
2021-07-07 19:21:36 -04:00
2021-07-08 02:05:10 -04:00
// 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);
}
void variablesControl() {
horaON1 = EEPROM.read(dirHoraON1);
horaOFF1 = EEPROM.read(dirHoraOFF2);
horaON2 = EEPROM.read(dirHoraON2);
horaOFF2 = EEPROM.read(dirHoraOFF2);
posON1 = EEPROM.read(dirPosON1);
posON2 = EEPROM.read(dirPosON2);
posOFF1 = EEPROM.read(dirPosOFF1);
posOFF2 = EEPROM.read(dirPosOFF2);
}