Os paso una función de interpolación.
Un valor del día puede venir dado por un valor entero o un valor long. Dado que los calculos intermedios podrían desbordar el máximo valor de un entero, suelo interpolar con long. (es una costumbre).
Código:
// *******************************************************************************
// InterpolacionLineal del valor del dimeo pata un momento TimeX dentro de un periodo de
// tiempo Time0..TimeF, sabiendo que al comiezo del periodo el valor del dimeo valdrá
// Dim0 y al Final DimF
//
// Uso:
// DimX= InterpoLineal(Time0, TimeX, TimeF, Dim0, DimF)
// *******************************************************************************
int InterpoLineal(long Time0, long TimeX, long TimeF, long Dim0, long DimF){
return (int) ( ((TimeX-Time0)*(DimF-Dim0) / (TimeF-Time0)) + Dim0 );
}
Yo voy a integrar todo lo que pueda en la caja que hará de pantalla de LEDs y en lugar de metacrilato voy a usar PVC espumado de un centímetro. Se trabaja como la madera. El metacrilato es un pelín más puñetero cuando no se tienen buenas herramientas.
Aitor el aspecto de tu montaje tiene una pinta estupenda. Eres un manitas, no como yo. ;-)
Yo tengo la idea de usar cuatro canales de dimeo para los LEDs. Inicialmente pensé en usar rojo, verde y azul + blanco cálido (todos ellos en muy diferentes proporciones.
De las primeras pruebas he visto que a pesar de usar el verde en muy poca medida y casi Siempre superpuesto con el rojo, no me gusta. Yo suelo ir variando el tono durante el amanecer que en mi caso durará una cantidad de tiempo configurable. Por defecto he definido 45 minutos de duración crepuscular tanto para el alba como para el ocaso que tendrán un comportamiento simétrico en cuanto a cambio de tonalidades de luz.
Estoy pensando cambiar los LEDs verdes por LEDs amarillos.
Para mí cada Arduino se comportará como una unidad central autosuficiente con independencia del número de acuarios que controle.
Por esa razón, mi enfoque no es el de usar un único reloj para varios Arduinos, sino el de que cada Arduino lleve su propio reloj de tiempo real y que todos ellos se puedan sincronizar, (aunque eso será para una versión posterior).
Mi primera versión no admitirá controles por puerto serie ni mucho menos mediante interfaz web. Mi primera versión usará un menú de botones para poder configurar el funcionamiento del controlador con parámetros que se guardarán en la EEPROM del Arduino, para ser recuperables en caso de caída de corriente.