Primero que todo, buenas noches. necesito de sus conocimientos para solucionar un problema de código, ya llevo varios días tratando de solucionarlo pero no fui capaz. cualquier guía será de mucha ayuda, les explicare de que se trata el proyecto y el funcionamiento:
El proyecto es automatizar una pecera; el funcionamiento es el siguiente:
consta de una cascada (motor) se enciende 5 (mañana) y se apaga 21:15 (noche), tiene un respaldo de una bombita que con la señal de un sensor se enciende (el sensor es de nivel) , el esta pendiente del nivel de la cascada ;si el se queda sin agua o baja el nivel el sensor manda la señal pero antes de encender espera 5 segundos para encender el motor ,luego que se encienda funciona 20 segundos, también tiene una lampara que se enciende tipo 9.30 ( mañana ) y se apaga a las 18 (noche). además tiene un pulsador stop que es pin 13 esta externamente colocado en pull_down , y los otros 2 están directos al Arduino que son uno para pagar las dos bombas independientes del programa y el otro lo deje por si se necesita para salir del stop. el circuito esta conformado por un Arduino uno R3,rtc 3231, todas las señales de salida (output) deben de ser en low para encender los relé 5v.
espero haberme echo entender, voy a mostrar el código que trate de hacer. muchas gracias...`
#include "RTClib.h"
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 70 // ancho pantalla OLED
#define SCREEN_HEIGHT 40 // alto pantalla OLED
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(OLED_RESET);
RTC_DS3231 rtc;
#define rele_1_ON 0
#define rele_1_OFF 1
#define rele_2_ON 0
#define rele_2_OFF 1
#define rele_3_ON 0
#define rele_3_OFF 1
#define rele_4_ON 0
#define rele_4_OFF 1
#define STOP_ON 1
#define STOP_OFF 0
//
//
int RELE_1 = 2; // BOMBA //
int RELE_2 = 4; // LAMPARA //
int RELE_3 = 6; // BOMBA_SENSOR //
int RELE_4 = 8;
int SENSOR =12; // SENROR//
int stop = 10 ;
void setup() {
Serial.begin(9600);
delay(3000);
Serial.println("Iniciando pantalla OLED");
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
display.clearDisplay();
display.setTextSize(1,1);
display.setTextColor(WHITE);
//pinMode(stop, INPUT_PULLUP);
//pinMode(star,INPUT);
pinMode(SENSOR, INPUT);
pinMode(RELE_1, OUTPUT);
pinMode(RELE_2,OUTPUT);
pinMode(RELE_3, OUTPUT);
pinMode(RELE_4, OUTPUT);
pinMode(10,INPUT_PULLUP);/// STOP//
rtc.begin();
Wire.begin();
if (!rtc.begin()) {
Serial.println("No encontrado RTC");
Serial.flush();
while (1) delay(10);
}
Serial.println("Configurando la fecha y hora Actual");
Serial.print("Fecha: ");
Serial.println(F(__DATE__));
Serial.print("Hora: ");
Serial.println(F(__TIME__));
Serial.println();
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop(){
DateTime tiempo = rtc.now();
display.setCursor(21,11);
display.println("Fecha \t" + tiempo.timestamp(DateTime::TIMESTAMP_DATE));
display.setCursor(30,20);
display.println("Hora \t" + tiempo.timestamp(DateTime::TIMESTAMP_TIME));
display.println();
delay(1000);
DateTime now = rtc.now();
//display.setCursor(22,11);
//display.print(DiaSemana[now.dayOfWeek()]);
//display.print(' ');
// display.print(now.date(), DEC);
display.print('/');
display.print(now.month(), DEC);
display.print('/');
display.print(now.year(), DEC);
display.print('/');
//display.setCursor(30,22);
display.print(now.hour(), DEC);
display.print(':');
display.print(now.minute(), DEC);
display.print(':');
display.print(now.second(), DEC);
delay(1000);
display.display();
display.setCursor(28,1); //Ubicamos el cursor en posicion 0 LCD primera linea
display.print("TEMPORIZANDO");
display.display();
delay(1000);
display.clearDisplay();
delay(1000);
estadoactual = digitalRead(SENSOR);
if (estadoactual && !estadoanterior) {tACTUAL=millis();
}
estadoactual = estadoanterior;
if (millis()-tACTUAL < 5000UL ) {
if (!digitalRead(SENSOR)) {digitalWrite(RELE_3, rele_3_ON);
Serial.print ("___Bomba_Sensor encendido");
}
}
if (now.hour()>=9 && now.minute()>=30 && now.hour()<18 && now.minute()<=01 ){
digitalWrite(RELE_2, rele_2_ON);
Serial.print ("____luz encendida");
}
else if (now.hour()>=18 && now.hour()<9 ){
digitalWrite(RELE_2, rele_2_OFF);
Serial.print ("____luz Apagada");
}
if (now.hour()>=5 && now.minute()>=01 && now.hour()<22 && now.minute()<=10 ){
digitalWrite(RELE_1, rele_1_ON);
Serial.print ("____Bomba encendida");
}
if (now.hour()>=5 && now.minute()>=01 && now.hour()<22 && now.minute()<=10 ){
digitalWrite(RELE_1, rele_1_OFF);
Serial.print ("____Bomba apagada ");
if (stop = 0 ){
Serial.println(" PAR0 DE EMERGENCIA ");
delay(500);
digitalWrite(RELE_1, rele_1_OFF);
Serial.print ("____Bomba apagada___EMERG");
display.setCursor(28,1); //Ubicamos el cursor en posicion 0 LCD primera linea
display.print("STOP");
display.display();
delay(1000);
display.clearDisplay();
delay(3000);
}
}
Moderador
Titulo corregido de acuerdo al punto 5 de las normas.
No usar palabras inútiles como "Ayuda ..."