(21-02-2016, 06:20 PM)Agamenon escribió: Magnífico trabajo depurando para la 1.6.7. Realmente esto del software funciona así, los estándares van cambiando, igual que la metodología, los patrones de diseño y la propia tecnología. Es muy habitual tener que refactorizar el código. En un código tan modular como CAO, aunque sean muchas líneas de código totales, es más fácil refactorizar porque el sistema está mucho más desacoplado.
Si estás depurando cosas Antonio, echa un ojo a un bug que he detectado en la versión actual de CAO.
Cuando activas el modo autosleep me ha ocurrido varias veces (no siempre) que cuando llega la hora de volver a encenderse y comenzar el día se queda el arduino pillado. Hay que resetearlo. Ya digo que solo pasa a veces. Evidentemente no es algo crítico, simplemente desactivas el modo autosleep y listo, pero es un bug que tiene una funcionalidad que podría ser interesante.
Otra cosa y como sugerencia para ese modo... no hay forma de apagar la pantalla?? porque el modo autosleep realmente lo que hace (o al menos en mi versión) es dejar la pantalla encendida pero sin que se refresquen caracteres. Es decir, se queda iluminada y en completo azul. Un comportamiento más deseable sería apagarla, y luego volver a encenderla al salir del modo sleep, no?
He revisado el código y no me parece muy probable que el fallo tenga que ver con el MODO_AUTOSLEEP, o por lo menos yo no he detectado nada sospechoso en el único lugar donde se hace algo con ello.
Código:
Noche= (Dimmer.GetZn()==0); // si estamos en periodo nocturno
if (Noche){
// Si la botonera no registra cambios desde hace minuto y medio, y esta activo el modo AutoSleep
if ( (Pulsad.DcSegDsdCambBotonera()>900) && Parm.EEP_Read(EP_AUTO_SLEEP)){
LCD.Cls();
}
else{
LCD.Refresh();
}
}
else{
LCD.Refresh();
}
Tambien he repasado la función DcSegDsdCambBotonera() sin encontrar nada y esta se usa en varios lugares de la aplicación y no parece sospechosa.
Respecto a la retroalimentación veo que hay un jumper y compruebo de es un jumper para la retroalimentación del LCD.
He logrado localizar las especificaciones de
LCD API 1.0
Creo que la
LiquidCrystal no incluye esta api completa pero la
LiquidCrystal_I2C ¡SÍ!
setBacklight(val)
Set the backlight off/on, or set Backlight brightness (0-255)
If the display only has the option to turn the backlight on and off, 0-off >0 = on
setContrast(val)
Set the contrast value of the display (0-255)
He probado estas nuevas funcionalidades en mi LCD y el resultado es que setBacklight(0) apaga el LED y cualquier otro valor (incluso el 1) enciende el LED al 100%. Es decir, el api viene preparado para esa funcionalidad pero lo único que puede hacer mi LCD es un todo o nada, lo cual ya es algo, y...
permite hacer lo que tú querías.
Veré como implementarlo. Lo lógico sería que se pudiriera parametrizar el brillo y el contraste con un valor normal y un valor nocturno que podría ser el LED apagado completamente.
Tal como está ahor el LCD, proporciona una suave luz nocturna azul al acuario y evita tropezar con las cosas de noche cuando decides no encender la luz, pero dudo que esto sea lo que todo el mundo necesita, je, je.