me has dejado sin palabras ,no soy progamador por lo que interpretro esa fase trabajan a un 59% segun codigo? me dices de cambiar int x float ¿ que consigo? seria algo asiPues he de decirte que si lo tienes implementado así no lo veo del todo bien. Te explico, y corrígeme si me equivoco, ... OK a las variables Inicio y Fin, que son el número de horas x 60. Así, las 14:30 serían 14.5*60 = 870, por ejemplo. Tenemos la variable MaxActinic a 75, que intuyo que es debería ser el porcentaje al que lucen las luces, es decir, a 75% máximo. El primer error lo veo en las variables PasoActinicAM y PM, en el que haces la división entre la duración del periodo, que está bien, y en tu caso sería 75/60=1.25, pero si te fijas la variable donde guardas el resultado es de tipo int, por lo que realmente redondea al entero más próximo, y te quedarías con 1. Según esto, el paso es 1 y no 1.25. Así, luego al calcular el valor de la luminosidad que hay que poner, que sería LucesActinic, tendrías, por ejemplo para el amanecer, en el minuto anterior al final (15:29), sería LucesActinic=(929-870)*1=59%, y no 73.75% que es lo que querrías, más cercano al MaxActinic. Tendrías que poner las variables de tipo float. Además, luego, el otro error es que pones en el analogWrite el valor de LucesActinic, por lo que según las operaciones de antes solo puede ser entre 0 y 75 (realmente 0 y 59 por ser de tipo int). Según esto, no varía de 0 a 255, sino de 0 a 59, con lo cual me parece que lo tienes muy por debajo de lo que podía iluminar. Intuyo que lo de PorcenActinic es realmente el paso de porcentaje al rango de 0 a 255, pero lo haces después del analogWrite, por lo que no sirve para nada. Tampoco veo la función que tienes ahí, por lo que no se si está bien hecha o no. Lo del display y los reles no lo he mirado, pero supongo que estará bien si consigues ver algo ;-). Según esto, tienes la pantalla funcionando (al menos las actínicas), a la cuarta parte de su potencial (255/60=4.25). Y, como te comentaba antes con lo del PWM, los valores de analogWrite estarían entre 0 y 59, no entre 0 y 255, por lo que el digitalWrite(HIGH) no se haría nunca y los timers siempre estarían activados, produciéndose las interrupciones. ¿Como lo ves?
float LucesActinic; float InicioAmanecerActinic=870; float FinAmanecerActinic=930; float InicioAnochecerActinic=1290; float FinAnochecerActinic=1350; float MaxActinic=75; float PorcentActinic; float PasoActinicAM=MaxActinic/(FinAmanecerActinic-InicioAmanecerActinic); float PasoActinicPM=MaxActinic/(FinAnochecerActinic-InicioAnochecerActinic); float Tiempo;...no dejo de aprender