Residencia en Medialab-Prado, 4. Primeros ejercicios: Un reloj

Imagen del patch para hacer un reloj en Puredata

Recuerdo que, cuando iba al colegio, en la asignatura de informática hicimos un ejercicio en LOGO que consistía en programar un reloj. Más de veinte años más tarde, este verano en Medialab-Prado, pensé que este era un ejercicio interesante luego de familiarizarme con lo más elemental del lenguaje de Puredata. Porque por un lado es una meta clara, todo el mundo sabe cómo funciona un reloj. Pero por otro, el cómo las agujas se mueven las unas en relación con las otras entraña algunas dificultades que nos obligan a poner en práctica una gran diversidad de cosas aprendidas.

Todo el patch empieza con un [loadbang] que lanza en el momento de cargarse un impulso a varios objetos para iniciarlos. Una de las cosas que ese [loadbang] inicia es la creación de la ventana de GEM, que es donde se representará gráficamente el reloj. Recuerda que en esa entrada tienes el enlace para descargar el paquete que incluye este patch junto a otros que iremos viendo en futuros posts.

Es importante diferenciar las partes en el reloj que hacen el recuento de las fracciones de tiempo, propiamente, de aquellas que simplemente sirven para representar esas fracciones. Resolver lo primero antes de entrar en lo segundo nos evitará muchos quebraderos de cabeza. Usé los elementos de tipo number y los objetos [print] para testear precisamente eso.

Siendo el reloj una herramienta para medir o representar el tiempo, la parte esencial de él es precisamente la que genera aquella que consideremos su unidad mínima. En Puredata el tiempo se suele especificar en milisegundos, y el objeto que genera un impulso cada un determinado número de ellos es [metro]. Es un metrónomo, vaya. Puesto que ahora se trata de hacer un reloj más o menos convencional, trabajaremos en segundos. [metro 1000] generaría un impulso cada mil milisegundos, es decir un segundo. Pero ello haría muy lento comprobar si el reloj funciona correctamente. Por ello usamos un tiempo veinte veces más pequeño, cada 50 milisegundos, que nos da un balance cómodo entre rapidez y posibilidad de observar lo que ocurre a nivel numérico y gráfico. Si acaso después nos interesa que el reloj funcione de manera convencional, ya cambiaríamos ese valor de vuelta a 1000.

Los impulsos que lanza metro se envían a [float] y a su bucle asociado que añade +1 por cada uno de ellos, y eso es el contador de segundos. Una vez tenemos los segundos vemos que ese valor se distribuye en tres columnas según si queremos representar segundos, minutos u horas. Los minutos son el resultado de dividir los segundos entre 60. Los minutos divididos a su vez entre 60 dan como resultado las horas. En la esfera del reloj caben 12 horas, por lo que en algún momento tenemos que usar esa división también para poder hacer la representación gráfica.

Al final esos pares de coordenadas van a parar a sendos objetos [polygon] para cada manecilla. Esos polígonos de hecho son líneas, están definidos por 2 puntos solamente; una de sus coordenadas es 0,0,0 (también está la coordenada Z) mientras que la otra viene dada por los valores que el patch va enviando cada n milisegundos, según lo que tengamos en el objeto [metro].

Otras cosas a destacar o comentar:

  • Verás que hay algunas sumas y restas de 90 grados y alguna multiplicación por valores negativos. El motivo es inicializar las rotaciones de las manecillas a la hora 12, y hacer que giren en el sentido correcto.
  • Uso cálculos de seno y coseno para sacar las coordenadas x e y correspondientes a uno de los extremos de cada manecilla.

1 opinión en “Residencia en Medialab-Prado, 4. Primeros ejercicios: Un reloj”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *