Estimados:
Luego de varias pruebas y correcciones de errores entregada por la gente del foro ya hace un año aprox, llegue a este código (Adjunto al final), este código funciona bien reconoce las fallas cambia de bomba pero cuando termina el ciclo de un mes no vuelve a empezar, el código debiera hacer lo siguiente:
Comienza el ciclo la bomba N°2 y debe trabajar 8 días, luego se cambia a la bomba N°3 y debe trabajar 8 días, luego se cambia a la bomba N°4 y debe trabajar 8 días, luego se cambia a la bomba N°1 y debe trabajar el saldo de días para completar un mes de 30 o 31 días. ademas agregué un código de error, cuando el presostato lance la señal de error se debe cambiar a la bomba siguiente, el tema es ue al completar un mes se apaga la ultima bomba y no vuelve a empezar el ciclo, a que se debe esto?
Cualquier ayuda me servirá de mucho y espero les sirva este código en sus proyectos.
Codigo:
#include <Wire.h>
#include "RTClib.h"
#include <Time.h>
#include <TimeLib.h>
RTC_DS1307 rtc;
int RELE1 = 8;
int RELE2 = 9;
int RELE3 = 10;
int RELE4 = 11;
int falla1=4;
int falla2=5;
int falla3=6;
int falla4=7;
int presostato=12;
void setup() {
Wire.begin();
Serial.begin(9600);
rtc.begin();
//nexInit();
//rtc.adjust(DateTime(F(__DATE__),F(__TIME__))); // para grabar la bora inicial solo se hace una vez.
pinMode (RELE1, OUTPUT);
pinMode (RELE2, OUTPUT);
pinMode (RELE3, OUTPUT);
pinMode (RELE4, OUTPUT);
pinMode (falla1, INPUT);
pinMode (falla2, INPUT);
pinMode (falla3, INPUT);
pinMode (falla4, INPUT);
pinMode (presostato, INPUT);
digitalWrite(RELE1, HIGH);
digitalWrite(RELE2, HIGH);
digitalWrite(RELE3, HIGH);
digitalWrite(RELE4, HIGH);
}
void loop() {
DateTime now= rtc.now();
Serial.println(now.day(),DEC);
Serial.println(now.hour(),DEC);
Serial.println(now.minute(),DEC);
int sensorfalla1= digitalRead(falla1);
int sensorfalla2= digitalRead(falla2);
int sensorfalla3= digitalRead(falla3);
int sensorfalla4= digitalRead(falla4);
int statepresostato=digitalRead(presostato);
Serial.println(statepresostato);
//----------------ACTIVANCIÓN BOMBA2-----------------------------------------
if ((now.day()>=1) && (now.day()<=8)) {
if (statepresostato==1){
statepresostato=0;
}
else {
statepresostato=1;
}
digitalWrite(RELE1, HIGH);
digitalWrite(RELE2, statepresostato);
Serial.println("FUNCIONANDO BOMBA2!");
while(sensorfalla2==HIGH){
Serial.println("FALLA BOMBA 2");
digitalWrite(RELE2,HIGH);
digitalWrite(RELE3,statepresostato);
}
}
//----------------ACTIVACIÓN BOMBA3------------------------------------------
if ((now.day()>8) && (now.day()<=16)) {
if (statepresostato==1){
statepresostato=0;
}
else {
statepresostato=1;
}
digitalWrite(RELE2, HIGH);
digitalWrite(RELE3, statepresostato);
Serial.println("FUNCIONANDO BOMBA3!");
while(sensorfalla3==HIGH){
Serial.println("FALLA BOMBA 2");
digitalWrite(RELE3,HIGH);
digitalWrite(RELE4,statepresostato);
}
}
//---------------ACTIVACIÓN BOMBA4-------------------------------------------
if ((now.day()>1) && (now.day()<=24)){
if (statepresostato==1){
statepresostato=0;
}
else {
statepresostato=1;
}
digitalWrite(RELE3, HIGH);
digitalWrite(RELE4, statepresostato);
while(sensorfalla4==HIGH){
Serial.println("FALLA BOMBA 4");
digitalWrite(RELE4,HIGH);
digitalWrite(RELE1,statepresostato);
}
}
//----------------ACTIVACIÓN BOMBA1------------------------------------------
if ((now.day()>24) && (now.day()<=31)){
if (statepresostato==1){
statepresostato=0;
}
else {
statepresostato=1;
}
digitalWrite(RELE4, HIGH);
digitalWrite(RELE1, statepresostato);
Serial.println("Funcionando bomba1!");
while(sensorfalla1==HIGH){
Serial.println("FALLA BOMBA 1");
digitalWrite(RELE1,HIGH);
digitalWrite(RELE2,statepresostato);
}
}
delay (1000);
}