martes, 13 de mayo de 2014

Reloj digital. Formato condicional.







No hay reloj analógico sin reloj digital. Esta es una frase rotunda, en absoluto  cierta, pero ya que hice un reloj analógico puedo hacer uno digital. Incluyo el mismo código VBasic que utilice en el reloj analógico pero solamente para refrescar el dato.
Esta vez el reloj se basa en la posibilidad de cambiar el formato de una celda en función del valor que contenga o de el valor que tome una determinada función. En una entrada anterior, Formato condicional, Emulación de un display, ya traté este tema. Este reloj digital no supone una gran diferencia con respecto a esa entrada, es una utilización práctica de la emulación del display. En vez de uno, seis.
Modificando el ancho y el alto de filas y columnas emulo o doy forma a 6 displays. Cada segmento, en este caso los display tienen 13 en vez de los 7 que tiene el display de la entrada anterior. Como decía, cada segmento, "luce" o "no luce" en función del número a representar. Los números a representar son:
  • H0. Parte izquierda de la hora. Para obtener la hora utilizo, dentro de una variable con nombre (HH), la función Hora(ahora()).  
  • H_1. Parte derecha de la hora.
  • M0. Parte izquierda de los minutos. Para obtener los minutos utilizo, dentro de una variable con nombre (MM), la función MINUTO(AHORA())   
  • M_1. Parte derecha de los minutos.
  • S0. Parte izquierda de los segundos. Para obtener los segundos utilizo, dentro de una variable con nombre (MM), la función SEGUNDO(AHORA())    
  • S_1. Parte derecha de los segundos.
  • La separación de los dígitos derecho derecho e izquierdo la hago con Izquierdo  Entero(HH/10),Entero(MM/10),Entero(SS/10) y Derecho HH-Entero(HH/10), MM-Entero(MM/10), SS-Entero(SS/10)
  • Estos cálculos los realizo directamente en las variables con nombre. La hoja, por tanto, no contiene nada, está vacía. La información, la hora, la presento cambiando el formato, mediante el formato condicional, de las celdas.
  • Como esta entrada está pensada para trabajar con formatos condicionales el número de segmentos es un poco indiferente, con representar razonablemente todos los números vale. La resolución de cada display depende de lo que deseemos o consideremos que es nuestro objetivo. Cuantos mas puntos mas resolución, mejor representación pero mucho mas trabajo.
  •  Si aumentamos el número de puntos aumentamos el número de funciones que los controlan.
  • Cada punto tiene su propia función.
  • Dibujamos (incluso a mano alzada), los n segmentos.
  • Número a número "dibujamos", realzando, los segmentos que hacen que se vea cada número.
  • En principio la función obtenida, o al menos la mas sencilla de sacar, es del tipo O. Se puede leer "este segmento se enciende cuando H0 vale 0 o cuando vale 2 o cuando vale 6 ..."  (=O(M0=0;M0=2;M0=6;M0=8))
  • Algunas de las funciones obtenidas  se pueden simplificar mediante la función Y, (=Y(H0<>5;H0<>6)), que se puede leer "este segmento se enciende cuando H0 es distinto de 5 y H0 es distinto de 6". Esta función da los mismos resultados que O(H0=0;H0=1;H0=2;H0=3;H0=4;H0=7;H0=8;H0=9;)