#include <Wire.h> // Importar la biblioteca Wire para la comunicación I2C
#include <RTClib.h> // Importar la biblioteca RTClib para el manejo del RTC DS3231
RTC_DS3231 rtc; // Crear una instancia del objeto RTC_DS3231
const int pin2 = 2; // Pin 2 para la entrada
unsigned long tiempoAnterior = 0; // Variable para almacenar el tiempo anterior
unsigned long contadorSegundos = 0; // Variable para contar los segundos
unsigned long conteoMinutos = 0; // Variable para contar los minutos
bool nuevoDia = false; // Indicador de inicio de nuevo día
void setup() {
Serial.begin(9600); // Inicializar el puerto serial
pinMode(pin2, INPUT); // Configurar el pin 2 como entrada
Wire.begin(); // Inicializar la comunicación I2C
rtc.begin(); // Inicializar el RTC DS3231
if (!rtc.isrunning()) {
Serial.println("RTC no está funcionando. Ajuste la hora actual en el código.");
// Puedes establecer la hora actual en el RTC utilizando rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
int estadoPin2 = digitalRead(pin2); // Leer el estado del pin 2
if (estadoPin2 == LOW) {
unsigned long tiempoActual = millis(); // Obtener el tiempo actual en milisegundos
if (tiempoActual - tiempoAnterior >= 1000) {
tiempoAnterior = tiempoActual; // Actualizar el tiempo anterior
contadorSegundos++; // Incrementar el contador de segundos
}
}
if (contadorSegundos % 60 == 0) {
conteoMinutos = contadorSegundos / 60;
Serial.print("Minutos: ");
Serial.println(conteoMinutos); // Mostrar el contador cada minuto
// Verificar si es la hora de corte (12:00)
DateTime now = rtc.now();
if (now.hour() == 12 && now.minute() == 0 && now.second() == 0) {
unsigned long horasCorte = conteoMinutos / 60;
Serial.print("Hora de corte - Tiempo acumulado: ");
Serial.print(horasCorte);
Serial.println(" horas");
// Reiniciar el contador de segundos
contadorSegundos = 0;
// Indicar que es un nuevo día
nuevoDia = true;
}
}
Serial.print("Segundos: ");
Serial.println(contadorSegundos);
// Verificar si es un nuevo día
if (nuevoDia) {
// Realizar operaciones para el nuevo día
Serial.println("¡Es un nuevo día!");
// Aquí puedes realizar cualquier operación o guardar los datos del día anterior
nuevoDia = false; // Reiniciar el indicador de nuevo día
}
Serial.println("...");
delay(1000); // Pequeña pausa para evitar la saturación de la CPU
}