Pages: 1 [2]   Go Down
Author Topic: Resta de fechas  (Read 3538 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Joeeee me siento que tiro un muro y me doy con otro, así todo el rato, veamos a ver:

En el siguiente codigo lo que pretendo es que si en la dirección 0 de la EEPROM pues que me escriba la fecha actual que lee del reloj con una función que ahora no tiene importancia.

Pues resulta que le asigno a una variable ese valor de la EEPROM y a sabiendas que es 0, aún así no me graba la fecha actual.

Code:
void setup() {
  
  Wire.begin();
  Serial.begin(57600);
  zero=0x00;
  int direccion = 0;
  long Vesihayfecha = EEPROM.read(direccion);
  
  getDateDs1307();
  if (Vesihayfecha = 0)
{
      getDateDs1307();
      EEPROM.write(direccion, year);
      direccion = direccion + 1;
      EEPROM.write(direccion, month);
      direccion = direccion + 1;
      EEPROM.write(direccion, dayOfMonth);
      direccion = 0;  
}
  
  
  
  
  
}

Luego para cerciorarme que en la posición 0 hay algo escrito, con otro programa escribo un 12 y luego lo leo y efectivamente lee 12 porque me lo imprime...
Code:
int direccion = 0;
  long Vesihayfecha = EEPROM.read(direccion);
Pero cuando se lo asigno a esa variable y la imprimo me imprime 0 en vez de 12.

El código entero por si sirve de algo:

Code:
#include <EEPROM.h>
#include "Wire.h"                        //Incluye la libería "Wire.h"
#define DS1307_I2C_ADDRESS 0x68          // DS1307_I2C_ADDRESS le damos el valor 0x68 para iniciar comunicación I2C con DS1307

                  //_______________________________________________________
                  // Código para compatibilizar versiones del IDE Arduino
                  //_______________________________________________________               
                 #if defined(ARDUINO) && ARDUINO >= 100   // Arduino v1.0 and newer
                 #define I2C_WRITE Wire.write
                 #define I2C_READ Wire.read
                 #else      // Arduino Prior to v1.0
                    #define I2C_WRITE Wire.send
                    #define I2C_READ Wire.receive
                 #endif

                  //_______________________________________________________
                  // Variables globales
                  //_______________________________________________________
        int Vesihayfecha;         
        int command = 0;       // This is the command char, in ascii form, sent from the serial port     
        int i;
        long previousMillis = 0;        // will store last time Temp was updated
        byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
        byte test;
        byte zero;
        char  *Day[] = {"","Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
        char  *Mon[] = {"","01","02","03","04","05","06","07","08","09","10","11","12"};
 
                  //_______________________________________________________
                  // Convierte decimal a Binario BCD
                  //_______________________________________________________
                  byte decToBcd(byte val)
                       {
                         return ( (val/10*16) + (val%10) );
                       }
 
                  //_______________________________________________________
                  // Convierte Binario BCD a Decimal
                  //_______________________________________________________                 
                  byte bcdToDec(byte val)
                       {
                         return ( (val/16*10) + (val%16) );
                       }



                  //_____________________________________________________________
                  // Es la función getDateDs1307 que solo lee la hora y la fecha
                  //______________________________________________________________
                    void getDateDs1307()
                                {
                                 // Coloca el cursor en el registro 0
                                 Wire.beginTransmission(DS1307_I2C_ADDRESS);
                                   I2C_WRITE(zero);
                                   Wire.endTransmission();
                                   Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
                                 // A few of these need masks because certain bits are control bits
                                     second     = bcdToDec(I2C_READ() & 0x7f);
                                     minute     = bcdToDec(I2C_READ());
                                     hour       = bcdToDec(I2C_READ() & 0x3f);  // Need to change this if 12 hour am/pm
                                     dayOfWeek  = bcdToDec(I2C_READ());
                                     dayOfMonth = bcdToDec(I2C_READ());
                                     month      = bcdToDec(I2C_READ());
                                     year       = bcdToDec(I2C_READ());                                         
                                }


                  //______________________________________________________________________________
                  // Tabla que contiene los días que han pasado desde principio de año en cada mes
                  //_______________________________________________________________________________
                  //(1 de Enero -> 0 días, 1 de Febrero -> 31 días, ...)
                  //     Ejemplo:
                  //              10/05/2012 --> ConvierteFechaEnNumero(2012,05,10) --> devuelve 4513 (=12*365+12/4+120+10)
                  //              31/12/2011 --> ConvierteFechaEnNumero(2011,12,31) --> devuelve 4382(=11*365+11/4+334+31)
                  //              10/05/2012 - 31/12/2011 = 4513 - 4382 = 131 días
                    int tablaMes[12] = {0,31,59,90,120,151,181,212,243,273,304,334};
                   
                    long ConvierteFechaEnNumero( int anio, int mes, int diademes)
                         {
                            long dia;
                            dia = (anio)*365 + (anio)/4 + tablaMes[mes-1] + diademes;
                            if(((anio)%4==0) && (mes<3)) // Es bisiesto y no hemos pasado 29/02
                            dia--;
                            return dia;
                         }
                 
                         

void setup() {
 
  Wire.begin();
  Serial.begin(57600);
  zero=0x00;
  int direccion = 0;
  long Vesihayfecha = EEPROM.read(direccion);
 
  getDateDs1307();
  if (Vesihayfecha = 0)
{
      getDateDs1307();
      EEPROM.write(direccion, year);
      direccion = direccion + 1;
      EEPROM.write(direccion, month);
      direccion = direccion + 1;
      EEPROM.write(direccion, dayOfMonth);
      direccion = 0; 
}
 
 
 
 
 
}

void loop() {   
     
      getDateDs1307();
      Serial.println(" ");
      delay(1000);
      Serial.println(year);
      delay(1000);
      Serial.println(month);
      delay(1000);
      Serial.println(dayOfMonth);           
      delay(1000);
     
     
     
      long FechaActual;
      FechaActual = ConvierteFechaEnNumero( year,month,dayOfMonth); // Prueba de la función ConvierteFechaEnNumero()
      Serial.println("FechaActual");
      Serial.println(FechaActual);
      delay(1000);
     
      long FechaGuardada;
      long direccion;
     
      long AnioGuardado = EEPROM.read(0);
         Serial.print(direccion);
         delay(1000);
         Serial.print("\t");
         delay(1000);
         Serial.print(AnioGuardado, DEC);
         delay(1000);
         Serial.println();
         direccion = direccion + 1;
      long MesGuardado  = EEPROM.read(direccion);
         Serial.print(direccion);
         delay(1000);
         Serial.print("\t");
         delay(1000);
         Serial.print(MesGuardado, DEC);
         delay(1000);
         Serial.println(); 
         direccion = direccion + 1;
      long DiaGuardado  =EEPROM.read(direccion);
         Serial.print(direccion);
         delay(1000);
         Serial.print("\t");
         delay(1000);
         Serial.print(DiaGuardado, DEC);
         delay(1000);
         Serial.println();
         delay(1000);
         direccion = 0;
   
     
      FechaGuardada = ConvierteFechaEnNumero( AnioGuardado,MesGuardado,DiaGuardado); // Prueba de la función ConvierteFechaEnNumero()
      Serial.println("FechaGuardada");
      Serial.println(FechaGuardada);
      delay(1000);
     
     
      long Resultado;
      Resultado = FechaActual - FechaGuardada;
      Serial.println("Resultado");     
      Serial.println(Resultado);
     
   
    }
//*****************************************************The End***********************
« Last Edit: May 14, 2012, 04:51:48 pm by barkalez » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ya lo he solucionado...

Code:
void setup() {
 
  Wire.begin();
  Serial.begin(57600);
  zero=0x00;
  int direccion = 0;
  long Vesihayfecha = EEPROM.read(direccion);
 
  getDateDs1307();
  if (Vesihayfecha < 12)
{
      getDateDs1307();
      EEPROM.write(direccion, year);
      direccion = direccion + 1;
      EEPROM.write(direccion, month);
      direccion = direccion + 1;
      EEPROM.write(direccion, dayOfMonth);
      direccion = 0; 
}
 
 
 
 
 
}


Es el valor que daba la eeprom a la variable que lo recogía... no puede ser = a 0,  he puesto que fuera menor  que 12 y funciona.

Un saludo
Logged

Spain
Offline Offline
Full Member
***
Karma: 0
Posts: 191
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

El problema no lo tenias ahí, sino en la condición del if:
Code:
  if (Vesihayfecha = 0)

Lo tienes que cambiar por:
Code:
  if (Vesihayfecha == 0)
Logged

Pages: 1 [2]   Go Up
Jump to: