Go Down

Topic: Rtc días transcurridos del año (Read 138 times) previous topic - next topic

cascade

Buenos días.
Estoy usando un Rtc 1302 por  obligación y necesito obtener los días transcurridos del año.
Es para dejar un sistema de riego que pueda modificar fácilmente las programaciones desde una SD.

Existe alguna manera de conocer los días transcurridos del año con alguna función o código sencillo?
 Estoy un poco limitado de memoria en el proyecto pues tengo que hacerlo con un nano.
Mil gracias

hypernovat

#1
Sep 24, 2017, 10:53 pm Last Edit: Sep 24, 2017, 11:15 pm by hypernovat
Hola cascade, en mis dias de aficionado a la astronomia usabamos un algoritmo para calcular el Dia Juliano.
Aqui encontre una pagina que te da la formula y la explica.
El dia juliano comienza en el medio dia de UTC.
Saludos, espero que te sirva.

https://agrupacionastronomicamagallanes.wordpress.com/experimento-de-eratostenes/conversion-de-fecha-a-dia-juliano/

harkonnen

Se le pasa la fecha y devuelve el día del año:

Code: [Select]

uint16_t diaDelAnyo(int anyo, int mes, int diaDelMes) {

  const uint8_t  diasMeses[]  = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  bool bisiesto;
  uint16_t dias = 0;

  if ((anyo % 400 == 0 ) || ((anyo % 4 == 0) && (anyo % 100 != 0)))
    bisiesto = true;
  else
    bisiesto = false;
   
  for (int contadorMes = 0; contadorMes < (mes - 1); contadorMes++) {
    dias += diasMeses[contadorMes];
    if (contadorMes == 1 && bisiesto){
      dias++;
    }
  }
  return dias + diaDelMes;

}



Saludos.

hypernovat

Hola, si uno quiere saber cuantos dias transcurrieron entre 2 fechas por ejemplo se puede usar este algoritmo (que esta basado en el dia juliano, aunque no es ese el resultado que arroja)
Code: [Select]

float j0;

//ejemplo:
//int yy=2017;
//int mm=10;
//int dd=11;

int yy=2016;
int mm=10;
int dd=11;

void setup() {
Serial.begin(9600);
  j0 = 367 * yy - int((7 * (yy + int((mm + 9) / 12))) / 4);
  j0 = j0 + int(275 * mm / 9) + dd + 1721013.5;
  Serial.println(j0);
}

void loop() {
  // put your main code here, to run repeatedly:

}


Por ejemplo asi como esta el codigo calcula un valor para el 11-10-2016, luego comentamos estos y descomentamos para el 11-10-2017 y restamos dichos valores. Por supuesto es a pruebas de bisiestos y para cualquier intervalo de tiempo. Saludos.

Go Up