Ideas con reloj ds1307

Wenas a todos,

estoy programando con el reloj DS1307, y quiero implementar una aplicación que cada día que pase me guarde una variable. Por ejemplo:

hoy es día 29, mañana ( día 30 ) quiero que me guarde la temperatura en la SD, y cada día lo mismo sucesivamente.

día 29 = 12 ºC

día 30 = 10 ºC

día 31 = 11 ºC
..

.

Utilizo la librería RTCDue especial para Arduino DUE, me funciona bien. Implementa estas funciones:

now.day();
now.month();
now.year();

now.hour();
now.minte();
now.second();

Lo que no sé es cómo hacer para detectar el cambio de día, hora, mes, etc.. ¿ alguna idea?

Y como se te ocurre hacerlo?
Tira opciones

O mejor dicho:
cuando cambia un minuto que ocurre?
cuando cambia una hora que ocurre
idem con el día?

guarda el valor del día actual en una variable y luego comparas si ha cambiando, si cambió entonces guardas el valor en la SD.

int dia = now.day();

if(now.day() != dia){
 //guarda datos en la SD
}

Bueno para cambio de día uso

if (now.hour() != 23 && now.min() >59 && now.sec() >59)

supongo que tienes el reloj en formato 24 horas
asi que comparo contra 23:59:59 si cambia a 0:00:00 listo..

también tu opción sirve y puede que sea mas simple que la mía.

es cómo lo tengo pensado hacer, lo que pasa es que si guardo el valor del día en la variable, la variable cambia de valor también. Ejemplo:

///___ dia 20

int dia = now.day(); // dia vale 20

if(now.day() != dia){ // now.day() 20 = dia 20
//guarda datos en la SD // no guarda
}

//_____dia 21

int dia = now.day(); // dia vale 21

if(now.day() != dia){ // now.day() 21 = dia 21
//guarda datos en la SD // no guarda

}

..

.

SGrips:
es cómo lo tengo pensado hacer, lo que pasa es que si guardo el valor del día en la variable, la variable cambia de valor también. Ejemplo:

///___ dia 20

int dia = now.day(); // dia vale 20

if(now.day() != dia){ // now.day() 20 = dia 20
//guarda datos en la SD // no guarda
}

//_____dia 21

int dia = now.day(); // dia vale 21

if(now.day() != dia){ // now.day() 21 = dia 21
//guarda datos en la SD // no guarda

}

..

.

la primera asignacion la puedes hacer en el setup que solo se ejecuta la primera vez que enciendes el arduino,luego solo tienes que comprobar en el loop si el dia ha cambiado con respecto a la variable que ya tienes.

int dia;
void setup() {
  dia = now.day();
}
void loop(){
  if(now.day() != dia){         
    //guarda datos
    dia = now.day();
  }
}

con el DUE no me deja hacerlo en el setup, voy a trastear la librería haber si puedo.

¡Muchas gracias!

si no te deja con el ejemplo que te ha puesto jose, entonces lo que puedes hacer es crear una nueva variable que verifique si se ha escrito el valor por primera vez.

int dia;
int guardado = 0;

void setup() {
}
void loop(){
  dia = now.day();
  if(now.day() != dia || guardado == 0){
    //guarda datos
    dia     = now.day();
     guardado = 1;
  }
}

no he trabajado con un arduino due, pero ¿cuál es el error que te da al asignar el valor en el setup?

No me he fijado en el mensaje de error, tengo que mirar haber por que pasa y trastear la librería.

Quizás sea un problema muy tonto y cambiando la librería de orden y las variables se solucione, lo miraré.

Gracias!!

solucionado!!

era una tontería, un error en una variable.

gracias!