Quiero hacer pequeño datalogger con libreria Time

Se quiere medir voltaje y tiempo, para guardarlos en la eeprom interna de un arduino Fio, lo que no logro hacer es guardar el tiempo, el cual se calcula con la libreria Time.

#include <EEPROM.h>
#include <Time.h>
#include <TimeLib.h>

float v1 = 4.98; // valor real de la alimentación de Arduino, Vcc
float r1 = 990000; // 1M
float r2 = 100400; // 100K
float fecha;
time_t t = now();//Declaramos la variable time_t t
//EEPROM
int Direccion = 0;//Declaramos una variable donde guardamos la dirección de la memoria que usaremos. En este caso 0.
int contador=0;//Declaramos una variable para guardar los valores de la EEPROM más adelante en el programa.
int UltimoValorSensor=0;//Aqui guardaremos el ultimo valor guardado en la EEPROM antes de que Arduino se apague.
int Dia=0;
int Mes=0;
int Año=0;
int Hora=0;
int Minuto=0;
int Segundo=0;

void setup() {
//////medicion de voltaje
Serial.begin(9600);
Serial.println("--------------------");
Serial.println(“VOLTIMETRO DC”);
Serial.print(“Voltaje Maximo: “);
Serial.print((int)(v1 / (r2 / (r1 + r2))));
Serial.println(“V”);
Serial.println(”--------------------”);
Serial.println("");
delay(2000);

//////Time
Serial.begin(9600);//Inicializamos el puerto serie.
//Anotamos la hora y la fecha desde la que nuestro programa empezará a contar.
//Formato: hora, minutos, segundos, días, mes, año
setTime(19,28,50,21,3,2017); // Las 19:58:00 del dia 21 de Marzo de 2017

//////EEPROM
contador = EEPROM.read(Direccion);//Guardamos en la variable contador el valor almacenado en la dirección elegida.
UltimoValorSensor = EEPROM.read(Direccion+1);//Guardamos en la variable UltimoValorSensor.
Dia = EEPROM.read(Direccion+2);
Mes = EEPROM.read(Direccion+3);
Año = EEPROM.read(Direccion+4);
Hora = EEPROM.read(Direccion+5);
Minuto = EEPROM.read(Direccion+6);
Segundo = EEPROM.read(Direccion+7);
}

void loop() {
///voltimetro
float v = (analogRead(A2) * v1) / 1024.0;
float v2 = v / (r2 / (r1 + r2));

//---------------------------------------------------------------------------------------
//En esta primera parte imprimiremos los valores del sensor registrados
//y el ultimo almacenado antes de apagar Arduino
//---------------------------------------------------------------------------------------
Serial.print("En la direccion “);//Imprimimos(En la direccion)
Serial.print(Direccion+1);//Imprimimos la variable Dirección+1.
Serial.print(” esta almacenado el ultimo valor del sensor: ");
Serial.println(UltimoValorSensor);////Imprimimos la variable UltimoValorSensor
Serial.print(“El valor actual es:”);
Serial.print(“V: “);
Serial.println(v2);//valor sensor
Serial.println(”-------------------------------------------------”);//Imprimimos lineas.
Serial.println
Serial.println
Serial.println
Serial.println
//--------------------------------------------------------------------------------------
//En esta segunda parte imprimimos los valores del contador.
//Apagando y volviendo a encender Arduino, podemos comprobar que el contador
// continua su cuenta en el último numero que se quedó
//--------------------------------------------------------------------------------------
Serial.print(“En la direccion “);
Serial.print(Direccion);//Imprimimos la variable Dirección.
Serial.print(” esta almacenado el valor: “);
Serial.print(contador);////Imprimimos la variable contador
Serial.println(” del contador”);
delay(2000);//Esperamos 2 segundos

//El siguiente bucle comprueba que contador sea igual a 255 y si es igual carga en valor un 0
//Esto lo hacemos porque en una dirección de memoria EEPROM no podemos almacenar un valor por encima de 255.
if(contador==255){
contador=0;}

contador++;//Sumamos uno a la variable contador
EEPROM.write(Direccion, contador);//Guardamos el valor del contador
EEPROM.write(Direccion+1, v2);//Guardamos el valor del voltaje
EEPROM.write(Direccion+2,day(t));//Guardamos el dia
EEPROM.write(Direccion+3,month(t));//Guardamos el mes
EEPROM.write(Direccion+4,year(t));//Guardamos el año
EEPROM.write(Direccion+5,hour(t));//Guardamos la hora
EEPROM.write(Direccion+6,minute(t));//Guardamos los minutos
EEPROM.write(Direccion+7,second(t));//Guardamos los segundos

//Imprimimos la fecha y lahora
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);//Esperamos 1 segundo

}

Tema movido a Software.
No reune las condiciones para estar en la sección Proyectos.
Simple consulta de software.
Lee las Normas del foro.
Luego ve a More (abajo a la derecha), click, luego Modify y estas en modo EDICION.
**Selecciona todo el código y click en </> arriba del emoticon **

Tags.jpg

Conversiones.......

Si a la dirección la pones como int y a V2 como float..... antes debes convertirla.... no crees? Empezando por ahí.......

no entiendo lo de las conversiones

kikoigo: Conversiones.......

Si a la dirección la pones como int y a V2 como float..... antes debes convertirla.... no crees? Empezando por ahí.......

jjsalazar:
no entiendo lo de las conversiones

Un float se guarda en 4 bytes; y un int en 2 bytes. La “conversión” viene siendo algo como:

byte* b = (byte*)&contador;
byte i = 0;

for (byte j = 0; j < sizeof(int); j++, i++)
  EEPROM.update(i, b[j]);

b = (byte*)&v2;
for (byte j = 0; j < sizeof(float); j++, i++)
  EEPROM.update(i, b[j]);

Si me captas la idea, creo que podré enseñarte la parte de recuperar los valores…