domingo, 6 de septiembre de 2015

Videojuegos para padres y maestros - Minetest (XV) - Mesecons (y 5)

Normalmente si tenéis los conocimientos previos necesarios, podéis seguir cualquier capítulo de esta especie de cursillo de manera independiente... sin embargo... éste que estáis leyendo precisa ver el anterior. Así que lo tenéis AQUÍ

Estuvimos viendo como podemos usar el Microcontroller de Mesecons para encender los puertos que queremos en función de si un puerto está activo o no.

Pues bien, también lo podemos hacer al revés... es decir, activar o no un puerto en función de los demás. Para ello usaremos condiciones lógicas que corresponden a las puertas lógicas que vimos en ESTE CAPÍTULO. (Ahí se explica más a fondo).

Veámoslo: 

NOT (!)

Si queremos activar el puerto B si el puerto A NO está activado:

off(B) if(!A) on(B);

AND (&)

Activamos el puerto B si el puerto A está activado Y el puerto C también:

off(B) if(A&C) on(B);

Activamos el puerto B si el puerto A está activado Y el puerto C NO lo está:

off(B) if(A&!C) on(B);

OR (|)

Activamos el puerto B si el puerto A está activo O el puerto C está activo (o los dos)

off(B) if(A|C) on(B);

El simbolito éste lo tenéis en la tecla [1] con el [Alt Gr] pulsado...


XOR (~)

Activamos el puerto B si el puerto A está activo O el puerto C está activo (pero NO los dos)

off(B) if(A~C) on(B);

Para conseguir este símbolo, lo mejor es que lo copiéis de esta página y lo peguéis pulsando  [CTRL + V] en Minetest o bien podéis pulsar [Alt Gr] + [4].

Igual (=)

Activamos el puerto B si el puerto A y el puerto C son iguales.

off(B) if(A=C) on(B);

Borriquito como tú

Contemplad esta creación:



Si yo quisiera pintar un A, debería iluminar los cubos con los números 1,2,3 y 5.  ¿Qué cubos debería pintar para el resto de vocales? 

Volvamos al ejercicio anterior.... ¿Hay algo que nos impida que el 1 sea la A, el 2 la E, el 3 la I?

Recopilemos:


¿Recordáis la tabla anterior?  La hemos ampliado con las luces a encender...  Podéis imaginar que la estrategia que vamos a usar es un microcontroller conectado a las luces 1, otro a las 2, otro a las 3... y que recibirá la letra pulsada y encenderá las luces si corresponde. ¿Y como metemos la letra pulsada al microcontroller?   La tenemos del ejercicio anterior.  Recordáis que habían unas luces que se encendían en función de tener un 1, un 2... es decir... una A, una E...

Pues bien... quitamos la luz A y conectamos el cable que la iluminaba con cada uno de los puertos A de los nuevos microcontroller. Hacemos lo mismo con las luces C y D. De esta manera cada microcontroller ya sabe que letra le está entrando...

Igual para que quede un poco más limpio tendréis que pasar cables bajo el suelo... es cuestión de hacer y deshacer hasta que os satisfaga el resultado...



Conectamos una luz a cada puerto libre (el B) y ahora ¿qué código ponemos?  No hay una solución única... pero el proceso mental es el mismo... se trata de agrupar de alguna manera todas las salidas. Es razonamiento puro...


Vemos que los 1 se encienden cuando A=1 y además cuando A es 0 y al mismo tiempo C es 1 o D es 1, pero no los dos a la vez, o sea un XOR.

Así que, en función a este razonamiento, el código del microcontroller que ilumina los 1 será:

off(B) if(A) on(B); if(!A&C~D) on(B);

Si venís del ámbito informático seguro que se os ocurre meterlo todo en un sólo if... el problema es que necesitaríamos paréntesis y estos no se admiten. Otra cosa importante es pensar en no preguntar sólo por los ceros, ya que en origen el microcontroller está apagado y ¡todo es cero!

Para los siguientes microcontrollers yo he escogido una solucion, pero podría existir otra más mejor. De todas maneras no estaría de más tratar de comprenderlas.

Microcontroller 1:  off(B) if(A) on(B); if(!A&C~D) on(B);
Microcontroller 2:  off(B) if(!A&!C&D) on(B); if(!A&C&!D) on(B); if(A&!D) on(B);
Microcontroller 3:  off(B) if(C~D&!A) on(B);
Microcontroller 4:  off(B) if(A) on(B); if(!A&C&!D) on(B);
Microcontroller 5:  off(B) if(D) on(B); if(A&!C&!D) on(B);

Conectad los puertos B de cada microcontroller a una luz (como en el afoto de arriba) y probad que se enciendan las luces deseadas...

Gran remate final y no estamos en rebajas

1.- Quitamos las luces de prueba.
2.- Montamos el 8 del principio del artículo.
3.- Unimos los cubos del mismo número (Todos los 1 con un cable, los 2 con otro)
4.- Unimos el cable que une los unos con el microcontroller 1, el cable que une los doses con el microcontroller 2 y así todos... 

Paciencia... no es fácil... usad aislantes y trabajad bajo el suelo si es necesario... mirad la que he liao:


Para guiar los cables podéis construir columnas de tierra (que luego podéis eliminar) y muy importante usar la herramienta del destornillador (buscadla en el inventario) que permite rotar los elementos para que se coloquen en la posición deseada.


¿El resultado?   


Como podéis imaginar, se podría hacer lo mismo con los números... aunque se complica un poco ya que las agrupaciones de los palos tienen que ser más pequeñas... pensadlo... además sólo podréis representar hasta el número siete...  ¿Qué por qué?  Completad la tabla y lo veréis...

Y nada más... evidentemente este ejercicio es muy complicado pero tiene razonamientos lógicos profundos que pueden ser un reto para l@s chaval@s de mayor edad...

En el próximo capítulo algo más de Microcontroller...

Un besín.

No hay comentarios:

Publicar un comentario