Modificar codigo para ahorrar memoria

Hola, estoy metido en un proyecto de un terrario, en el que quiero simular 4 estaciones del año, aunque ahora unicamente estoy intentandolo con la luz. Pero al paso que voy me quedo sin memoria en el arduino en nada.

El codigo que muestro mas abajo como adjunto funciona sin problemas, y esta adaptado para los dias actuales en los que estamos, pero necesito saber si habria alguna manera de resumirlo o modificarlo para no tener que repetir cada dia del mismo mes todos los datos y al mes siguiente igual y asi para los 12 meses y los 365 dias del año teniendo que repetir esta parte, como vereis en el codigo:

if (d.month =1){//primer mes
  if (d.day = 11){//dia 11 del mes primero
 
 int hora_ON = 17;// hora del alba
 int minuto_ON = 12;//minuto alba
int hora;
 int hora_OFF = 17; //hora ocaso
 int minuto_OFF = 17;//minuto ocaso

if (hora_ON == d.hour24h  && minuto_ON == d.minutes && !activar ) {
   activar = true;
   iluminacion_ON = 0;
 }
 if (hora_OFF == d.hour24h  && minuto_OFF == d.minutes && !desactivar ) {
   desactivar = true;
   iluminacion_OFF = 0;
 
 } //fin dia 11
 else if (d.day = 12){//dia 12 del mes primero
   int hora_ON = 17;
 int minuto_ON = 15;

 int hora;
 int hora_OFF = 17;
 int minuto_OFF = 22;
 /
 if (hora_ON == d.hour24h  && minuto_ON == d.minutes && !activar ) {
   activar = true;
   iluminacion_ON = 0;
 }
 if (hora_OFF == d.hour24h  && minuto_OFF == d.minutes && !desactivar ) {
   desactivar = true;
   iluminacion_OFF = 0;
 }

La intencion es aumentar o disminuir las horas de luz desde 9 del invierno hasta un maximo de 14-15 horas de verano y viceversa, a razon de 2-3 minutos en el alba y 2-3 minutos en el ocaso cada dia.

Habia pensado en poner una fecha y hora fija del alba y ocaso para cada estacion y a partir de hay aumentar o disminuir las horas de luz y si funciona intentarlo posteriormente con la temperatura y humedad, en pocas palabras recrear las condiciones de un año en la naturaleza, pero no tengo ni idea por donde empezar.

Un saludo y espero vuestra ayuda para el tema iluminacion.

PD. la pantalla es lcd 2004 I2C, rtc 3231, las placas UNO y estoy esperando una MEGA (por si no me llega la memoria para todo el proyecto).

terrarioluz.ino (6.58 KB)

De entrada puedes substituir las variables int (2 bytes) por byte (1 byte) en los valores que vayan de 0 a 255 ,como por ejemplo la hora (de 0 a 24) o los minutos (de 0 a 60).Las variables solo se declaran una vez en el ambito que vayas a usarlas ,no cada vez que vayas a asignarle un valor (he visto que pones varias veces int hora_On o int hora_OFF ,solo hay que anteponer el tipo de variable la primera vez que la creas...)

Bueno. Googleando por ahí he visto esta página que contiene una librería con la que puedes calcular las horas de orto y ocaso en una determinada longitud/latitud y zona horaria. No sé cuál será su precisión, pero supongo que suficiente para tu propósito. Yo por mi parte me la apunto ;).

Noter para el sunpos es mejor esta:

http://www.psa.es/sdg/sunpos.htm

Es de la central de almeria y super perfecto

Porque vuelves a la carga con el mismo problema que ya te resolví hace unas semanas? Te lo pregunté en otro hilo y no respodiste. Acaso no funcionó o este es otro problema?

Gracias por la aportación, pincho41700. Entiendo que a partir de sunpos es fácil deducir la próxima hora de orto/ocaso ¿no?
El código aparentemente es más liviano, aunque supongo que agregarle la función orto/ocaso lo engordará, y al otro código se podrá aligerar algo. Lo ideal sería comparar exactitud.
Saludos.

surbyte:
Porque vuelves a la carga con el mismo problema que ya te resolví hace unas semanas? Te lo pregunté en otro hilo y no respodiste. Acaso no funcionó o este es otro problema?

Surbyte, que tendran que ver las churras con las merinas.

Este hilo es iluminacion de un terrario, y nada tiene que ver con la huerta champiñones, ni con el problema del oxigeno que tampoco me sirvieron de nada.

Noter y pincho41700 una gran aportacion, muchas gracias. El problema es que de mi casa a donde lo van poner hay 50 km de diferencia, y las coordenadas no son mas mismas y aunque intentase poner las del sitio, como aun no esta definido el lugar exacto no me cuadrarian los horarios.. De todo modos voy a provarlony ya veremos que sale.
Un saludo

Hombre. Entiendo que el objetivo es simular los amaneceres y anocheceres, y no imitar los de la propia zona en la que estás, así que poco importa la ubicación ¿no?. Esto te aportaría ventajas, porque si por ejemplo vives en la Patagonia puedes simular las horas de luz de Texas.

Vaya respuesta!!

Quote from: surbyte on Today at 10:56:36

Porque vuelves a la carga con el mismo problema que ya te resolví hace unas semanas? Te lo pregunté en otro hilo y no respodiste. Acaso no funcionó o este es otro problema?

Surbyte, que tendran que ver las churras con las merinas.

Este hilo es iluminacion de un terrario, y nada tiene que ver con la huerta champiñones, ni con el problema del oxigeno que tampoco me sirvieron de nada.

El código que te hice usa control de tiempos, lo modificas y haces justamente esto mismo.
Pero bueno.. no te molesto mas porque veo que te molesto.

NOter:

si se implementa muy bien , creo recordar que era a 0 grados empezaba y a 180 teminada el sol.

Sadvance:

por 50km no pasa nada seran un minuto escaso.