Se puede contar días con un DS3231 (ZS-042) RTC? vi que trabaja como reloj, pero puedo contar por ejemplo 45 dias? 110 dias?
Porque no dices que tiene un DS3231 en lugar del nombre del módulo que solo conoce el fabricante?
Claro que puedes usar un RTC DS3231 para contar dias.
Perfecto, entonces tendria:
1.- Setear una fecha. Ejemplo: 01/02/2017
2.- Restarle a esa fecha. Ejemplo: 18/03/2017 y así obtener los dias transcurridos 45 días.
3.- Pasarlo a una variable y compararlo con otra que sea 45 y en dicho caso cambie de estado.
Puedo guardar varias fechas en el DS3231 RTC? estoy usando la libreria RTClib.h
Pero esas son operaciones al margen de tener o no un RTC.
El RTC te mantiene una hora pase lo que pase con el arduino, este o no energizado.
Lo que tu hablas es de calcular un tiempo transcurrido respecto de una fecha de inicio y compararla con la actual y cuando se cumpla hacer algo.
Eso no requiere mayor problema. No sabes cómo hacerlo?
Yo uso la librería Time.h
Acá tienes un ejemplo
#include <Time.h>
time_t T0, T1 ; // Contenedores de fechas
void setup()
{ Serial.begin(115200); }
void loop() {
// 01/02/2017
T0 = SetFecha(2017, 2, 1, 12, 0, 0); //01/02/2017 12:00:00
printFecha(T0) ;
T1 = SetFecha(2017, 3, 18, 12, 0, 0); // 18/03/2017 12:00:00
printFecha(T1) ;
printFecha(T1 - T0);
Serial.println("--------------------------------------------------");
time_t H = T1 - T0 ;
Serial.print(String(year(H )- 1970)+" años," + String(month(H)-1 )+" meses,");
Serial.println(String(day(H))+ " dias," + String(hour(H))+ " horas");
Serial.println("---------------------------------------------------");
}
void printFecha(time_t t)
{
Serial.print(day(t)) ; Serial.print(+ "/") ; Serial.print(month(t)); Serial.print(+ "/") ;
Serial.print(year(t)); Serial.print( " ") ;
Serial.print(hour(t)); Serial.print(+ ":") ; Serial.print(minute(t)); Serial.print(":") ;
Serial.println(second(t));
delay(1000);
}
time_t SetFecha(int y, int m, int d, int h, int mi, int s )
{ tmElements_t Fecha ;
Fecha.Second = s;
Fecha.Minute = mi;
Fecha.Hour = h;
Fecha.Day = d ;
Fecha.Month = m ;
Fecha.Year = y -1970 ;
return makeTime(Fecha);
}