Este cubo LED utiliza un microcontrolador Arduino Uno para crear un espectáculo de luces en movimiento muy espectacular. Para realizar este proyecto con éxito la paciencia es una de las claves, si sigue el tutorial paso a paso no tendrá ningún problema en desarrollarlo.
Por último, lo más importante en este proyecto es que te diviertas .
Antes de comenzar la construcción, es importante tener una visión completa de cómo va a funcionar, para que pueda improvisar e identificar los errores a medida que avanzas. Necesitamos controlar los 64 leds del cubo con tan solo 20 pin de la placa de arduno, vamos a estar utilizando una técnica denominada multiplexación. Rompemos el cubo en cuatro capas separadas por lo que sólo necesitamos pines de control para 16 LEDs – de modo para encender un LED específico, debemos activar tanto la capa , y el pin de control , que nos da una necesidad total de 16 +4 pines. Cada capa tiene un cátodo común – la parte negativa del circuito – así que todas las patas negativas se unen entre sí , y se conecta a un solo pin para esa capa .
En el lado (positivo ) de ánodo , cada LED se puede conectar a la correspondiente LED en la capa por encima y por debajo de ella . En esencia , tenemos 16 columnas de las patas positivas y 4 capas de la negativa. El siguiente diagrama en 3D muestra perfectamente la idea :
Lo primero es tomar el trozo de porexpan y pegar en él la plantilla para poder armar el cubo. A continuación ya podemos ir doblando los cátodos (piernas cortas) de los LED 90 grados y luego soldar a todos juntos para formar un cátodo común. Cada una de las cuatro capas contará con un cátodo común y 16 ánodos individuales (piernas largas).
Debes doblar todas los cátodos de los Leds de manera uniforme, yo me ha ayudado de unos alicates de precisión pequeños, como los de la imagen. Con un poco de paciencia voy soldando de cuatro en cuatro los catodos de los diodos.
El siguiente paso es utilizar un cable para conectar las cuatro filas juntos en una capa, se podría utilizar cuatro tiras de alambre por capa, pero en realidad sólo se necesitan dos iguales – una tras la primera tira de LEDs y un segundo antes de la última tira de LEDs. Yo he usado tres tiras por capa para dar una mayor sensación de cubo unido, en la imagen de abajo podrás observar como quedaría cada capa con un cátodo común y 16 ánodos individuales.
Asegúrese de recortar cualquier exceso de cable colgando sobre el borde de su cubo , también puedes recortar los cuatro cátodos que sobresalen del borde de la capa.
Recuerda que en las soldaduras debes usar el menor contacto y tan poco de soldadura como sea posible. Recuerde, más estaño en cada soldadura no es sinónimo de mayor fuerza en la unión, al contrario podría dar problemas más adelante.
Ahora que tenemos las cuatro capas individuales, vamos a soldarlas entre si para formar el cubo. Vamos a hacer esto al unir los 16 ánodos de cada capa juntos para que nos quedamos con 16 ánodos comunes y 4 cátodos comunes.
A partir de aquí tendremos que darnos maña para completar la tarea, podeis usar:
Bueno vamos ahora al conexionado del cubo a la placa arduino y posterior programación, Usamoa las placas board para pinchar el cubo, y conectamos a cada uno de los 16 ánodos cómunes una resistencia de 220 Oh, que a su vez se conectarán a los puertos de Arduino, como se muestran en el gráfico siguiente. A su vez cada capa que forman los cátodos comunes se conectarán a los puertos A2. A3, A4 y A5.
Una vez realizadas las conexiones me puedo descargar cualquiera de los dos programas adjuntos, cada uno de ellos muestran animaciones diferentes.
Si usted desea hacer sus propias animaciones , sigue leyendo y voy a explicar cómo funciona.
Así , cuando se abrió el código en el software de Arduino, te habrás dado cuenta de la gran bloque de código en el medio que parecía un poco a esto.
En cada línea hay 64 bits de 1 y 0 , se dividió en 16 bloques de 4 bits cada uno, los cuatro primeros nibbles (cuartetos de bits) corresponden a la capa 1, los siguientes a la capa 2 y asi hasta la cuatro. Si hay un 1, entonces eso significa que un LED se encendió, si hay un 0, entonces no va a lucir.
He separado por colores cada capa, de forma que el color negro corresponde a la capa 1(la inferior), la rojo a la dos, verde tres y azul la cuarta capa. Bien en las capas 2, 3 y 4 todo está a cero significa que todos los leds de esas capas están apagados, sin embargo si observamos la capa 1 (la inferior) vemos que está encendido el primer led de cada nibble (cuarteto), lo que quiere decir que lucirán los leds de la fila inferior del fondo. El último valor de la fila indica el tiempo que permanece la secuencia.
#include // allows use of PROGMEM to store patterns in flash
#define CUBESIZE 4
#define PLANESIZE CUBESIZE*CUBESIZE
#define PLANETIME 3333 // time each plane is displayed in us -> 100 Hz refresh
#define TIMECONST 20 // multiplies DisplayTime to get ms – why not =100?
prog_uchar PROGMEM PatternTable[] = {
// blink on and off
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 100,
// circle full layer at bottom
B0000,B0000,B0100,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0000,B0000,B0110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0000,B0010,B0110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0000,B0110,B0110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0000,B1110,B0110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0000,B1110,B1110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0000,B1110,B1110,B1000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0000,B1110,B1110,B1100, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0000,B1110,B1110,B1110, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0000,B1110,B1110,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0000,B1110,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0000,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0001,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0011,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 20,
// circle full layer at bottom
B0000,B0000,B0100,B0000, B0000,B0000,B0100,B0000, B0000,B0000,B0100,B0000, B0000,B0000,B0100,B0000, 10,
B0000,B0000,B0110,B0000, B0000,B0000,B0110,B0000, B0000,B0000,B0110,B0000, B0000,B0000,B0110,B0000, 10,
B0000,B0010,B0110,B0000, B0000,B0010,B0110,B0000, B0000,B0010,B0110,B0000, B0000,B0010,B0110,B0000, 10,
B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, 10,
B0000,B1110,B0110,B0000, B0000,B1110,B0110,B0000, B0000,B1110,B0110,B0000, B0000,B1110,B0110,B0000, 10,
B0000,B1110,B1110,B0000, B0000,B1110,B1110,B0000, B0000,B1110,B1110,B0000, B0000,B1110,B1110,B0000, 10,
B0000,B1110,B1110,B1000, B0000,B1110,B1110,B1000, B0000,B1110,B1110,B1000, B0000,B1110,B1110,B1000, 10,
B0000,B1110,B1110,B1100, B0000,B1110,B1110,B1100, B0000,B1110,B1110,B1100, B0000,B1110,B1110,B1100, 10,
B0000,B1110,B1110,B1110, B0000,B1110,B1110,B1110, B0000,B1110,B1110,B1110, B0000,B1110,B1110,B1110, 10,
B0000,B1110,B1110,B1111, B0000,B1110,B1110,B1111, B0000,B1110,B1110,B1111, B0000,B1110,B1110,B1111, 10,
B0000,B1110,B1111,B1111, B0000,B1110,B1111,B1111, B0000,B1110,B1111,B1111, B0000,B1110,B1111,B1111, 10,
B0000,B1111,B1111,B1111, B0000,B1111,B1111,B1111, B0000,B1111,B1111,B1111, B0000,B1111,B1111,B1111, 10,
B0001,B1111,B1111,B1111, B0001,B1111,B1111,B1111, B0001,B1111,B1111,B1111, B0001,B1111,B1111,B1111, 10,
B0011,B1111,B1111,B1111, B0011,B1111,B1111,B1111, B0011,B1111,B1111,B1111, B0011,B1111,B1111,B1111, 10,
B0111,B1111,B1111,B1111, B0111,B1111,B1111,B1111, B0111,B1111,B1111,B1111, B0111,B1111,B1111,B1111, 10,
B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, 10,
// loop all borders around
B1111,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 5,
B0000,B1111,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 5,
B0000,B0000,B1111,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 5,
B0000,B0000,B0000,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 5,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 5,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1111, B0000,B0000,B0000,B0000, 5,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1111, 5,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B1111,B0000, 5,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1111,B0000,B0000, 5,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1111,B0000,B0000,B0000, 5,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1111,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 5,
B0000,B0000,B0000,B0000, B1111,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 5,
// and again
B1111,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 2,
B0000,B1111,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 2,
B0000,B0000,B1111,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 2,
B0000,B0000,B0000,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 2,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 2,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1111, B0000,B0000,B0000,B0000, 2,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1111, 2,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B1111,B0000, 2,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1111,B0000,B0000, 2,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1111,B0000,B0000,B0000, 2,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1111,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 2,
B0000,B0000,B0000,B0000, B1111,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 2,
B1111,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 2,
// all borders
B1111,B1001,B1001,B1111, B1001,B0000,B0000,B1001, B1001,B0000,B0000,B1001, B1111,B1001,B1001,B1111, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1001,B1001,B1111, B1001,B0000,B0000,B1001, B1001,B0000,B0000,B1001, B1111,B1001,B1001,B1111, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1001,B1001,B1111, B1001,B0000,B0000,B1001, B1001,B0000,B0000,B1001, B1111,B1001,B1001,B1111, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
// all borders fall down from back top to front bottom
B1111,B1001,B1001,B1111, B1001,B0000,B0000,B1001, B1001,B0000,B0000,B1001, B1111,B1001,B1001,B1111, 100,
B1111,B1001,B1001,B1111, B1001,B0000,B0000,B1001, B1111,B0000,B0000,B1001, B0000,B1111,B1001,B1111, 8,
B1111,B1001,B1001,B1111, B1111,B0000,B0000,B1001, B0000,B1111,B0000,B1001, B0000,B0000,B1111,B1111, 8,
B1111,B1001,B1001,B1111, B0000,B1111,B0000,B1001, B0000,B0000,B1111,B1001, B0000,B0000,B0000,B1111, 8,
B0000,B1111,B1001,B1111, B0000,B0000,B1111,B1001, B0000,B0000,B0000,B1111, B0000,B0000,B0000,B0000, 8,
B0000,B0000,B1111,B1111, B0000,B0000,B0000,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 8,
B0000,B0000,B0000,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 8,
// 4 at the time to make a block
B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10, // left bottom front
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, 10, // right top, back
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, 10, // right top, front
B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10, // left bottom, back
B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10, // right bottom front
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, 10, // left top, back
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, 10, // left top, front
B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10, // right bottom, back
// rotate corner 4 leds
B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, 20, // left bottom front and right top, back
B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, 20, // right bottom front and left top, back
B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, 20, // left top, front and right bottom, back
B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, 20, // left bottom, back and right top, front
B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, 15, // left bottom front and right top, back
B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, 15, // right bottom front and left top, back
B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, 15, // left top, front and right bottom, back
B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, 15, // left bottom, back and right top, front
B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, 10, // left bottom front and right top, back
B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, 10, // right bottom front and left top, back
B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, 10, // left top, front and right bottom, back
B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, 10, // left bottom, back and right top, front
B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, 7, // left bottom front and right top, back
B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, 7, // right bottom front and left top, back
B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, 7, // left top, front and right bottom, back
B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, 7, // left bottom, back and right top, front
B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, 5, // left bottom front and right top, back
B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, 5, // right bottom front and left top, back
B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, 5, // left top, front and right bottom, back
B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, 5, // left bottom, back and right top, front
B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, 2, // left bottom front and right top, back
B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, 2, // right bottom front and left top, back
B1100,B1100,B0000,B0000, B1100,B1100,B0000,B0000, B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, 2, // left top, front and right bottom, back
B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, B0000,B0000,B1100,B1100, B0000,B0000,B1100,B1100, 2, // left bottom, back and right top, front
// bottom layer, to top though middle
B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 30,
B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, 2,
B0000,B0000,B0000,B0000, B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, 2,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, 2,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0110,B0110,B0000, 2,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1111,B1111,B1111,B1111, 20,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
// loop top and bottom corners
B0100,B0000,B0000,B0010, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0100,B0000,B0000,B0010, 5,
B0010,B0000,B0000,B0100, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0010,B0000,B0000,B0100, 5,
B0001,B0000,B0000,B1000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0001,B0000,B0000,B1000, 5,
B0000,B0001,B1000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0001,B1000,B0000, 5,
B0000,B1000,B0001,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1000,B0001,B0000, 5,
B1000,B0000,B0000,B0001, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1000,B0000,B0000,B0001, 5,
// again
B0100,B0000,B0000,B0010, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0100,B0000,B0000,B0010, 5,
B0010,B0000,B0000,B0100, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0010,B0000,B0000,B0100, 5,
B0001,B0000,B0000,B1000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0001,B0000,B0000,B1000, 5,
B0000,B0001,B1000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0001,B1000,B0000, 5,
B0000,B1000,B0001,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1000,B0001,B0000, 5,
B1000,B0000,B0000,B0001, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1000,B0000,B0000,B0001, 5,
// loop up and down full layer
B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0001,B0000,B0000,B0000, B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0001,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, 10,
B0001,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1111,B1111,B1111,B1111, 10,
B0001,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, 10,
B0001,B0000,B0000,B0000, B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
// loop left and right full layer
B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, 10,
B0010,B0010,B0010,B0010, B0010,B0010,B0010,B0010, B0010,B0010,B0010,B0010, B0010,B0010,B0010,B0010, 10,
B0100,B0100,B0100,B0100, B0100,B0100,B0100,B0100, B0100,B0100,B0100,B0100, B0100,B0100,B0100,B0100, 10,
B1000,B1000,B1000,B1000, B1000,B1000,B1000,B1000, B1000,B1000,B1000,B1000, B1000,B1000,B1000,B1000, 10,
B0100,B0100,B0100,B0100, B0100,B0100,B0100,B0100, B0100,B0100,B0100,B0100, B0100,B0100,B0100,B0100, 10,
B0010,B0010,B0010,B0010, B0010,B0010,B0010,B0010, B0010,B0010,B0010,B0010, B0010,B0010,B0010,B0010, 10,
B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, 10,
B1001,B1001,B1001,B1001, B1001,B1001,B1001,B1001, B1001,B1001,B1001,B1001, B1001,B1001,B1001,B1001, 10,
B1111,B1111,B1111,B1111, B1001,B1001,B1001,B1001, B1001,B1001,B1001,B1001, B1001,B1001,B1001,B1001, 10,
B1111,B1111,B1111,B1111, B1001,B1001,B1001,B1001, B1001,B1001,B1001,B1001, B1111,B1111,B1111,B1111, 10,
B1111,B1111,B1111,B1111, B1111,B1001,B1001,B1111, B1111,B1001,B1001,B1111, B1111,B1111,B1111,B1111, 10,
B0000,B0000,B0000,B0000, B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, B0000,B0000,B0000,B0000, 10,
// outer cube, inner cube
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, 10,
B0000,B0000,B0000,B0000, B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, 10,
B0000,B0000,B0000,B0000, B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, 10,
B0000,B0000,B0000,B0000, B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, 10,
B0000,B0000,B0000,B0000, B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, B0000,B0000,B0000,B0000, 10,
// circle layer by layer bottom to top
B0000,B0000,B0100,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0010,B0110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0110,B0110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B1110,B0110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B1110,B1110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B1110,B1110,B1000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B1110,B1110,B1100, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B1110,B1110,B1110, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B1110,B1110,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B1110,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0001,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0011,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0100,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0010,B0110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0110,B0110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B1110,B0110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B1110,B1110,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B1110,B1110,B1000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B1110,B1110,B1100, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B1110,B1110,B1110, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B1110,B1110,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B1110,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0001,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0011,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0100,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0110,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0010,B0110,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0110,B0110,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B0110,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B1110,B0000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B1110,B1000, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B1110,B1100, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B1110,B1110, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B1110,B1111, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B1111,B1111, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1111,B1111,B1111, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0001,B1111,B1111,B1111, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0011,B1111,B1111,B1111, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0100,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0110,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0010,B0110,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0110,B0110,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B0110,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B1110,B0000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B1110,B1000, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B1110,B1100, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B1110,B1110, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B1110,B1111, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1110,B1111,B1111, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1111,B1111,B1111, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0001,B1111,B1111,B1111, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0011,B1111,B1111,B1111, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0111,B1111,B1111,B1111, 6,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1111,B1111,B1111,B1111, 6,
B0001,B0000,B0000,B0000, B0001,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0011,B0000,B0000,B0000, B0011,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0011,B0010,B0000,B0000, B0011,B0010,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0011,B0011,B0000,B0000, B0011,B0011,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0110,B0110,B0000,B0000, B0110,B0110,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0110,B0110,B0000,B0000, B0110,B0110,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0110,B0110,B0000, B0000,B0110,B0110,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0110,B0110, B0000,B0000,B0110,B0110, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0011,B0011, B0000,B0000,B0011,B0011, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0001,B0011,B0111, B0000,B0001,B0011,B0111, B0000,B0000,B0001,B0011, 10,
B0000,B0000,B0000,B0000, B0000,B0011,B0111,B0111, B0000,B0011,B0111,B0111, B0000,B0001,B0011,B0111, 10,
B0000,B0000,B0000,B0000, B0000,B0111,B0111,B0111, B0000,B0111,B0111,B0111, B0000,B0011,B0111,B0111, 10,
B0000,B0000,B0000,B0000, B0000,B0111,B0111,B0111, B0000,B0111,B0111,B0111, B0000,B0111,B0111,B0111, 10,
B0000,B0000,B0000,B0000, B0000,B1110,B1110,B1110, B0000,B1110,B1110,B1110, B0000,B1110,B1110,B1110, 10,
B0000,B1110,B1110,B1110, B0000,B1110,B1110,B1110, B0000,B1110,B1110,B1110, B0000,B0000,B0000,B0000, 10,
B0000,B1110,B1110,B1110, B0000,B1110,B1110,B1110, B0000,B1100,B1110,B1110, B0000,B0000,B0000,B0000, 10,
B0000,B1110,B1110,B1110, B0000,B1100,B1110,B1110, B0000,B1000,B1100,B1110, B0000,B0000,B0000,B0000, 10,
B0000,B1100,B1110,B1110, B0000,B1000,B1100,B1110, B0000,B0000,B1000,B1100, B0000,B0000,B0000,B0000, 10,
B0000,B1000,B1100,B1110, B0000,B0000,B1000,B1100, B0000,B0000,B0000,B1000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B1000,B1100, B0000,B0000,B0000,B1000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B1000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B1000,B1000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B1000,B1000,B1000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1000,B1000,B1000,B1000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1100,B1000,B1000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1110,B1000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1110,B0000,B0000,B0000, B0010,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0110,B0000,B0000,B0000, B0011,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0010,B0000,B0000,B0000, B0011,B0001,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0011,B0001,B0001,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0001,B0001,B0001,B0001, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0001,B0001,B0011, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0001,B0111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1110, B0000,B0000,B0000,B1000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1100, B0000,B0000,B1000,B1000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1000, B0000,B0000,B1100,B1000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B1110,B1000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B1111,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0001,B0111,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0001,B0001,B0011,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0001,B0001,B0001,B0000, B0001,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0001,B0001,B0000,B0000, B0011,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0001,B0000,B0000,B0000, B0111,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1111,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1110,B1000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1100,B1100,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B1000,B1110,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B1111,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0001,B0000,B0000, B0000,B0111,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0001,B0000,B0000, B0000,B0001,B0000,B0000, B0000,B0011,B0000,B0000, 10,
B0000,B0001,B0000,B0000, B0000,B0001,B0000,B0000, B0000,B0001,B0000,B0000, B0000,B0001,B0000,B0000, 10,
B0001,B0001,B0000,B0000, B0000,B0001,B0000,B0000, B0000,B0001,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0011,B0001,B0000,B0000, B0000,B0001,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0111,B0001,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1100,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1110,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B0001,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B0011,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B0111,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1100, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1110, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0111,B0111,B0111,B0111, B1000,B1000,B1000,B1000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0011,B0011,B0011,B0011, B0100,B0100,B0100,B0100, B1000,B1000,B1000,B1000, B0000,B0000,B0000,B0000, 10,
B0001,B0001,B0001,B0001, B0010,B0010,B0010,B0010, B0100,B0100,B0100,B0100, B1000,B1000,B1000,B1000, 10,
B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, B0010,B0010,B0010,B0010, B0100,B0100,B0100,B0100, 10,
B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, B0010,B0010,B0010,B0010, 10,
B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, B0001,B0001,B0001,B0001, 10,
B0010,B0001,B0001,B0001, B0010,B0001,B0001,B0001, B0010,B0001,B0001,B0001, B0010,B0001,B0001,B0001, 10,
B0100,B0010,B0001,B0001, B0100,B0010,B0001,B0001, B0100,B0010,B0001,B0001, B0100,B0010,B0001,B0001, 10,
B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, 10,
B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, 10,
B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 10,
B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 10,
B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, 10,
B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, 10,
B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, 10,
B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, 10,
B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 10,
B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 10,
B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, 10,
B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, 10,
B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 10,
B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 10,
B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, 10,
B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, 10,
B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, 10,
B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, 8,
B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 8,
B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 8,
B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, 8,
B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, 8,
B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 8,
B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 8,
B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, 8,
B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, 8,
B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, 8,
B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, 8,
B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 8,
B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 8,
B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, 8,
B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, 7,
B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 7,
B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 7,
B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, 7,
B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, 7,
B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, 7,
B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, 7,
B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 7,
B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 7,
B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, 7,
B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, 6,
B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 6,
B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 6,
B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, 6,
B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, 6,
B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, 6,
B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, 6,
B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 6,
B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, 6,
B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, 6,
B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, 6,
B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 6,
B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 6,
B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, 6,
B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, 5,
B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 5,
B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 5,
B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, B0010,B0010,B0100,B0100, 5,
B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, B0100,B0100,B0010,B0010, 5,
B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, B1000,B0100,B0010,B0001, 5,
B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, B0000,B1100,B0011,B0000, 5,
B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 10,
B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 10,
B0000,B0010,B0100,B0000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 10,
B0000,B0000,B0000,B0000, B0000,B0010,B0100,B0000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0010,B0100,B0000, B0001,B0010,B0100,B1000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0010,B0100,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1000, B0000,B0010,B0000,B1000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1000, B0000,B0010,B0000,B1000, B0000,B0010,B1000,B0000, 10,
B0000,B0000,B0000,B1000, B0000,B0010,B0000,B1000, B0000,B0010,B1000,B0000, B0000,B0000,B1000,B0000, 10,
B0000,B0010,B0000,B1000, B0000,B0010,B1000,B0000, B0000,B0000,B1000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0010,B1000,B0000, B0000,B0000,B1000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B1000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0100,B0010,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0110,B0110,B0000, B0000,B0100,B0010,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1001,B0110,B0110,B1001, B0000,B0110,B0110,B0000, B0000,B0100,B0010,B0000, B0000,B0000,B0000,B0000, 10,
B1101,B0111,B1110,B1011, B1001,B0110,B0110,B1001, B0000,B0110,B0110,B0000, B0000,B0100,B0010,B0000, 10,
B1111,B1111,B1111,B1111, B1101,B0111,B1110,B1011, B1001,B0110,B0110,B1001, B0000,B0110,B0110,B0000, 10,
B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1101,B0111,B1110,B1011, B1001,B0110,B0110,B1001, 10,
B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1101,B0111,B1110,B1011, 10,
B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, 10,
B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
// this is a dummy element for end of table (duration=0) aka !!!DO NOT TOUCH!!!
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 0
};
/*
** Defining pins in array makes it easier to rearrange how cube is wired
** Adjust numbers here until LEDs flash in order – L to R, T to B
** Note that analog inputs 0-5 are also digital outputs 14-19!
** Pin DigitalOut0 (serial RX) and AnalogIn5 are left open for future apps
*/
int LEDPin[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
int PlanePin[] = {16, 17, 18, 19};
// initialization
void setup()
{
int pin; // loop counter
// set up LED pins as output (active HIGH)
for (pin=0; pin<PLANESIZE; pin++) {
pinMode( LEDPin[pin], OUTPUT );
}
// set up plane pins as outputs (active LOW)
for (pin=0; pin0
do {
// read pattern from PROGMEM and save in array
memcpy_P( PatternBuf, PatternTable+PatternIdx, PLANESIZE );
PatternIdx += PLANESIZE;
// read DisplayTime from PROGMEM and increment index
DisplayTime = pgm_read_byte_near( PatternTable + PatternIdx++ );
// compute EndTime from current time (ms) and DisplayTime
EndTime = millis() + ((unsigned long) DisplayTime) * TIMECONST;
// loop while DisplayTime>0 and current time < EndTime
while ( millis() < EndTime ) {
patbufidx = 0; // reset index counter to beginning of buffer
// loop over planes
for (plane=0; plane<CUBESIZE; plane++) {
// turn previous plane off
if (plane==0) {
digitalWrite( PlanePin[CUBESIZE-1], HIGH );
} else {
digitalWrite( PlanePin[plane-1], HIGH );
}
// load current plane pattern data into ports
ledpin = 0;
for (ledrow=0; ledrow<CUBESIZE; ledrow++) {
for (ledcol=0; ledcol<CUBESIZE; ledcol++) {
digitalWrite( LEDPin[ledpin++], PatternBuf[patbufidx] & (1 << ledcol) );
}
patbufidx++;
}
// turn current plane on
digitalWrite( PlanePin[plane], LOW );
// delay PLANETIME us
delayMicroseconds( PLANETIME );
} // for plane
} // while 0); // read patterns until time=0 which signals end
}