miércoles, 6 de mayo de 2009

Calculadora NXT

Bueno, quizá este proyecto sea algo difícil para los que estén empezando, pero ya que es de los más recientes que tengo y no necesita más que el ladrillo procesador y un sensor de contacto, lo publico el primero para que lo podáis usar todos.
Bien, como ya he indicado, lo único que necesitaréis es el ladrillo y un sensor de contacto, colocado con un par de pines en alguno de los agujeros que tiene el ladrillo, en el lado que queráis. El programa, bastante simple,pero muy largo, lo podéis descargar aquí.

http://www.megaupload.com/?d=BMIRGZZT
La estructura básica la componen tres ramas, superior, media e inferior:

---Empezaré por la rama media que es la que contiene la estructura basa de nuestra calculadora:
Al principio de ella se reinician todas las variables (8 en total). Estas variables se dividen en 3 grupos:





  1. Grupo 1: Las 4 primeras, todas numéricas, dos de las cuales tienen por nombre "resultado" y las otras dos "número", indicando al lado con un 1 o un 2 a qué parte del programa pertenecen (1 al primer número, 2 al segundo).La variable "número" está continuamente actualizándose, tomando valores del 0 al 9 (los 10 dígitos posibles) indicando así el valor de las unidades del número a operar. La variable "resultado" se multiplica por 10 cada vez que introducimos un nuevo dígito, guardando el número que estamos operando. Para explicar esto mejor pondré un ejemplo: Supongamos que tenemos el nº 37, y queremos poner 378, entonces, al introducir un nuevo dígito (8), la variable resultado (=37) se multiplicará por 10, para así sumarle el 8 y obtener 37x10 + 8 = 378, que es el nº deseado.
  2. Grupo 2: Las 3 siguientes, todas variables lógicas, que cominzan siendo falsas par air tomando valores verdaderos a medida que se completa el programa, y así ir poniendo en pantalla los datos necesarios (Más explicado en la rama inferior)

  3. Grupo 4: Una última variable numérica, que guardará los datos de la operación a realizar con nºs del 1 al 4, así, un "1" será una suma, un "2" una resta...



Bien, explicadas las variables,pasamos a lo siguiente, aquí se mostrará durante un segundo el texto "reiniciando...", con la opción "borrar" activada, para asegurarnos de que se borra toda la pantalla y vuelve a cero (sobre todo en el caso de hacer una segunda operación después de la primera), luego se reinicia definitivamente la pantalla, y después ya comienza el resto del programa.




Vamos a las operaciones, las del 1er bucle son iguales a las del tercero (estos bucles se corresponden a los números a operar), así que explicaré el funcionamiento de uno solo:

  1. La primera bifurcación es la encargada de controlar el valor de la variable "número", que es el último dígito que estará escrito en la pantalla. Cuando el botón derecho es pulsado, se le suma 1 a la variable "número", y en el caso de que sea mayor que 10 (no existe un dígito para mostrar ese valor), será reajustada a 0, de tal manera que pulsando repetidas veces el botón derecho la variable irá tomando los distintos valores entre 0 y 9.

  2. Esta segunda bifurcación es la encargada de actualizar el resultado cada vez que pulsamos el botón izquierdo (=añadir dígito) leyendo la variable "resultado", mutiplicándola por 10 (ya que usamos el sistema decimal) y sumándole la variable "número", que será el dígito que hayamos decidido añadir, después, volverá a escribir la variable "número" con el valor 0.

  3. La última bifucación es la única que actúa en sus dos ramas ( ya que en las otras, si no pulsamos un botón, no debe pasar nada).La rama de arriba sólo se cumplirá si el resultado es 0, en cuyo caso sólo mostrará en pantalla la variable "número". En caso contrario, a la variable"resultado" se le asignará un texto (numérico) que se sumará a la variable "número", para mostrar en todo momento en pantalla el valor del resultado final.

  4. Por último, el bucle se cerrará en caso de que pulsemos el botón intro, saliendo ya al exterior. Para terminar, ya fuera de la bifurcación, debemos marcar el resultado final, ya que si queremos poner, por ejemplo, el número 459, tenemos un "45" (en la variable "resultado") y un "9" (en la variable "número"), así que multiplicamos el primero por 10, y le sumamos 9, reescribiendo esto en la variable "resultado".



El segundo bucle es muy simple, consta de dos partes:

  1. La primera, idéntica a la parte del bucle anterior que escribía la variable "número", con la diferencia que aquí escribe la variable "operación", y que sólo toma valores del 1 al 4 (las 4 operaciones básicas)

  2. En la segunda, a cada número se le asigna la imagen de un símbolo matemático (+,-,x,:) y la muestra en la pantalla, actualizándose cada poco para ver si ha habido cambios en el tipo de operación.



El tercer bucle es igual que el primero, con la diferencia de que utiliza distintas variables.




Ya para terminar, al haber marcado del último número, el programa esperará hasta que el sensor de contacto sea pulsado, para reiniciar la calculadora.Se me olvidó decir que al final de cada bucle, se marca como variable verdadera una de las tres "terminado", esto nos será útil para mostrar el resultado en pantalla sólo cuando hallamos terminado con las operaciones.




---Bien, ahora pasamos a la rama superior, que será la encargada de mostrar el resultado final:

Empezamos con un bucle, que contiene una bifurcación, ésta sólo se efectuará en el caso de que las tres variables "terminado" estén marcadas como verdaderas (esto ocurre al terminar de introducir los números), en este caso, leerá el valor de la variable "operación" y lo asignará a una bifurcación con varias salidas, dependiendo del valor de la entrada. Dentro de éstas, leerá las dos variables "resultado" haciendo con ellas la operación asignada a la variable "operación", y mostrará el resultado en pantalla.

---Por último, la rama inferior se encarga de ir mostrando los distintos números en pantalla, cuando ya nos hemos salido de sus bucles en la rama media, ya que de lo contrario se borrarían. Comienza mostrando una línea en pantalla (para separar las operaciones del resultado) que será permanente, ya que está dentro de un bucle que se reinicia constantemente.




El resto se divide en tres partes:

  1. La primera parte sólo se activará al terminarar de introducir el primer número, cuando la variable "terminado_1" sea verdadera, entonces, leerá el valor de la variable "resultado_1" y lo mostrará en pantalla.

  2. La segunda parte se activa al ser verdadera la variable "terminado_2" y mostrará el signo matemático correspondiente al valor de la variable "operación"

  3. Por último, esta parte se activa al ser verdadera la última variable lógica ("terminado_3), y mostrará el valor del segundo número en pantalla.


Bien, pues ya está todo explicado, si os queda alguna duda, no dudéis en comentar, decir que he omitido algunas cosas que ocurren que considero irrelevantes, si tenéis dudas sobre ellas, ya sabéis, un comentario y lo soluciono.




¿Creíais que una calculadora iba a ser sencilla?

Saludos.

P.D: Ya sé que dije que no soltaría grandes parrafadas, ya lo sé...

No hay comentarios:

Publicar un comentario