jueves, 7 de mayo de 2009

Reloj con alarma.

Bueno, esto, más que para ver la hora o usar nuestro NXT como despertador, nos va a valer para comprobar como para cosas simples se pueden necesitar programas no tan simples.El programa lo encontraréis aquí:
http://www.megaupload.com/?d=RAU8GV75


Dicho esto, comienzo a explicar el programa, que utiliza el ladrillo y dos sensores de contacto (si no tenéis dos podéis reemplazar uno por un sensor de luz, por ejemplo, que detecte cuando es tapado y deja de recibir luz). Es, de nuevo, un programa que no utiliza apenas hardware, controlándose por 5 botones:

El programa utiliza 8 variables, tres para las horas, minutos y segundos, otras tres para las horas, minutos y segundos de la alarma, otra para sincronizar el inicio del programa, y una última para encender o apagar la alarma.

---Comenzamos por la primera rama, que es la que mantendrá la cuenta de la hora y la irá actualizando.
Vemos que comienza con un bucle que no terminará hasta que la variable "start" sea verdadera, esto ocurrirá cuando ajustemos la hora en la tercera rama.
Ya después, entramos en el bucle principal, que cada segundo sumará 1 a la variable "segundos", y cuando esta llegue a 59, la fijará en 0 y sumará 1 a la variable "minutos", que llegada a 59 volverá a ser 0 y sumará 1 a las horas, que llegadas a 23 se pondrán a 0 de nuevo.
Además, cada vez que una variable se resetea reiniciará el display, para evitar mostrar números duplicados.
Simple , ¿verdad?


---Ahora pasamos a la segunda rama, ésta rama es la encargada de mostrar en todo momento los valores de las variables de la hora, para verla en pantalla, además, mostrará unos puntos que separan la hora, básicamente, lo que hace es transformar el valor de las variables a texto, para mostrar este en la pantalla.


---Y bien, llegamos a la tercera rama, que es donde corre el grueso del programa.
Comienza marcando a 0 las variables que marcan la hora, pues ya dentro del bucle las ajustaremos a la hora conveniente.

  1. Ya dentro del bucle, hay 4 iconos de visualizar, que indicarán las instrucciones en pantalla. Después, el bucle comprueba si se pulsan o no los botones del ladrillo NXT, en caso de que no se pulsen, no pasará nada, pero si se pulsan leerá el valor de la varible seleccionada (botón izquierdo para "horas", central para "minutos" y derecho para "segundos"), le sumará 1, y comprobará si excenden su valor máximo (no existen las 16:87:67, por ejemplo), y si ha sido superado las volverán a poner a cero, de tal manera que la variable "horas" tomará valores entre 0 y 23, y las otras dos valores entre 0 y 59.
    Una vez pulsemos el sensor de contacto, saldremos del bucle, indicando que hemos fijado la hora adecuada.
  2. Ya fuera del bucle, marcará la variable "start" como verdadera, permitiendo a las partes primera, cuarta y quinta del programa comenzar a funcionar.(si recordamos, la primera era la encargada de actualizar la hora cada segundo, las otras dos vienen explicadas más abajo).
    Además. reiniciará la pantalla (para borrar las instrucciones) y marcará las variables de la hora de alarma a cero.
  3. El segundo bucle será el encargado de fijar la hora de alarma, actuando de igual manera que el primero, es decir, ajustando las horas, minutos y segundos cada vez que pulsemos un botón.
    Esto interactuará con la cuarta rama.

---La cuarta rama sólo se activa cuando la variable "start" es verdadera (es decir, cuando ya hemos ajustado la hora), por lo demás, esta rama actúa exactamente igual que la segunda, es decir, mostrando en pantalla la hora, con la diferencia que utiliza las variables de la alarma ("horas_a", "minutos_a" y "segundos_a"), además del texto "alarma" y unos puntitos que separan horas de minutos, y minutos de segundos.

---La quinta rama también se activa al terminar de ajustar la hora, y se subdivide a su vez en dos, controlando el funcionamiento de la alarma.

En la primera sub-rama, se está continuamente comprobando si la hora actual y la fijada en la alarma coinciden, en cuyo caso mirará si la variable "On/Off" es verdadera (esta variable detecta si está o no encendida la alarma), y si es verdadera nuestro ladrillo comenzará a sonar hasta que pulsemos el sensor de contacto, (durante 1 segundo mínimo, si no puede que no la apaguemos y siga sonando, evitando reconciliar el sueño, jajaja).

Por otra parte, la segunda sub-rama es la que enciende o apaga la alarma, utilizando El sensor de contacto del puerto 2, sustituible por otro sensor.
Primero marca la variable "On/Off" como falsa, así que la alarma comienza apagada, y cuando el sensor de contacto (2) sea pulsado, cambiará su valor, pues lee el acual, el cual asigna a una bifurcación lógica, dentro de la cual se cambia su valor. A la vez, cuando no está pulsado, asigna el valor de la variable "On/Off" a otra bifurcación lógica, y escribe en la pantalla su correspondiente valor.




Y ya hemos terminado, por último, comentar que no he mencionado muchos reseteos de pantalla que encontraréis por el programa, simplemente son para evitar acumulación de números en pantalla, por lo que los considero poco relevantes.

Saludos.

No hay comentarios:

Publicar un comentario