Hola a todos, espero me puedan ayudar con el error que estoy cometiendo, tengo una programación para un Arduino mega 2560, estoy creando un sistema de riego, estoy usando un modulo RTC y un modulo de 4 relés. El inconveniente es que cargo el programa y el relé se me activa automáticamente, entra al if, y según mis condiciones lo apaga. Pero debería ser totalmente al revés: cargar el programa y que se mantenga apagado, y luego al entrar al if se prenda. Ya intenté cambiar los HIGH y LOW pero sigue sin funcionar.
Adjunto el codigo:
//SISTEMA DE RIEGO AUTOMÁTICO - CARACOLERA
//Uso de arduino Mega, pantalla OLED, RTC y módulo de 4 reles.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "RTClib.h"
// Para pantalla OLED
#define ANCHO 128
#define ALTO 64
#define OLED_RESET 4
Adafruit_SSD1306 oled(ANCHO, ALTO, &Wire, OLED_RESET);
//////////////////////SISTEMA DE RELOJ
//Para el Programa
int n_dia;
int r_dia;
int n_mes;
int t_mes;
int n_anno;
int d_anno;
int t_siglo=6;
int rr_dia;
//int RELE = 50;
// Modulo RTC
RTC_DS1307 RTC;
bool riego = true; // para el If que controlará el riego.
bool riego_fin = true;
#define RELE 50
void setup () {
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicaci¢n con el RTC
RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora (Comentar una vez establecida la hora)
//el anterior se usa solo en la configuracion inicial
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
oled.begin(SSD1306_SWITCHCAPVCC, 0X3C);
pinMode(RELE, OUTPUT);
}
void loop(){
//////////////////////INICIO SISTEMA DE RELOJ Y PANTALLA OLED
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
Serial.print(now.year(), DEC); // Año
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.day(), DEC); // Dia
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');
Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
oled.clearDisplay();
oled.setTextColor(WHITE);
oled.setTextSize(1);
oled.setCursor(0,0);
oled.print("D:");
oled.print(now.year(), DEC);
oled.print("/");
oled.print(now.month(), DEC);
oled.print("/");
oled.print(now.day(), DEC);
oled.print(" ");
oled.setCursor(0,9);
oled.print("T: ");
oled.print(now.hour(), DEC);
oled.print(":");
oled.print(now.minute(), DEC);
oled.print(":");
oled.print(now.second(), DEC);
oled.setCursor(0,18);
//delay(1000); // La informaci¢n se actualiza cada 1 seg.
oled.display();
n_anno=(now.year()-2000);
d_anno=n_anno/4;
n_dia=now.day();
n_mes=now.month();
switch (n_mes) {
case 1:
t_mes=0;
break;
case 2:
t_mes=3;
break;
case 3:
t_mes=3;
break;
case 4:
t_mes=6;
break;
case 5:
t_mes=1;
break;
case 6:
t_mes=4;
break;
case 7:
t_mes=6;
break;
case 8:
t_mes=2;
break;
case 9:
t_mes=5;
break;
case 10:
t_mes=0;
break;
case 11:
t_mes=3;
break;
case 12:
t_mes=5;
break;
default:
t_mes=t_mes;
break;
}
r_dia=n_dia+t_mes+n_anno+d_anno+t_siglo;
r_dia = r_dia % 7;
switch (r_dia) {
case 1:
oled.print("Lun");
Serial.println(" Lun");
break;
case 2:
oled.print("Mar");
Serial.println(" Mar");
break;
case 3:
oled.print("Mie");
Serial.println(" Mie");
oled.setCursor(0,26);
oled.print(r_dia);
Serial.println(r_dia);
break;
case 4:
oled.print("Jue");
Serial.println(" Jue");
oled.setCursor(0,26);
oled.print(r_dia);
break;
case 5:
oled.print("Vie");
Serial.println(" Vie");
break;
case 6:
oled.print("Sab");
Serial.println(" Sab");
break;
case 0:
oled.print("Dom");
Serial.println(" Dom");
break;
default:
oled.print("---");
Serial.println(" ---");
break;
oled.display();
}
oled.display();
int Dato1(r_dia); // se almacena el valor de la variable r_dia en una nueva variable como numero entero
////////////////////// FINAL SISTEMA DE RELOJ
////////////////////// ACCIONAMIENTO DE RELÉ PARA ACTIVAR EL RIEGO
/// If para día y hora específica de riego.
if (Dato1==2 && now.hour()==12 && now.minute()==14){ //condicional de día y hora especfica para activar el riego
if (riego == true){
digitalWrite(RELE, HIGH);
oled.setCursor(0,26);
Serial.println("Riego activado");
oled.print("Riego activado");
oled.display();
riego=false; //desactiva la alarma
}
}
if (Dato1==2 && now.hour()==12 && now.minute()==15){ //condicional de día y hora especfica para activar el riego
if (riego_fin == true){
digitalWrite(RELE,LOW);
oled.setCursor(0,30);
Serial.println("Riego desactivado");
oled.print("Riego desactivado");
oled.display();
riego_fin=false; //desactiva la alarma
}
}
delay(1000);
if (now.hour()==2 && now.minute()==00){
riego=true;
riego_fin=true;
}
}