miércoles, 3 de mayo de 2017

ARDUINO - PROYECTOS

ARDUINO

PROGRAMACIÓN
Por: Lic. Alejandro Hinojosa Elvin



1) POV controlado desde Android


Arduino POV Controlado Desde Android

Proyecto de un POV con Arduino controlado desde el celular.

Proyectos POV hechos con Arduino hay muchos, pero quise realizar uno en el cual se pudiera enviar el mensaje o palabra a visualizar, a través del celular para evitar estar a cada rato cargando el programa en el arduino cada vez que deseba visualizar una palabra diferente. Por esta razón realicé este proyecto que hoy les comparto.
Nota: (Es mi primer proyecto montado en instructable)
Ha sido montado en la protoboard, y acoplada al eje del motor con pegante super adhesivo.
La lista de materiales es la siguiente:
  • Una tarjeta Arduino Uno o cualquier modelo.
  • Módulo de Bluetooth HC-05
  • 7 leds de cualquier color.
  • 8 Resistencias de 220.
  • 1 Resistencia de 10K.
  • 1 Diodo emisor de infrarojos.
  • 1 Fotodiodo receptor.
  • 1 Batería de 9V.
  • 1 motor de CC para colocar el circuito.
  • Cables de conexión.

Step 1: Diagrama Del Circuito

Diagrama Del Circuito
Para las conexiones se usa el esquema anterior.
  • El fotodiodo en conjunto con el emisor de infrarojos y es para detectar la posición y asi siempre empezar a escribir el mensaje desde la misma posición y evitar que se muestren las letras corridas.
  • Recordad que el fotodiodo (receptor) debe ser polarizado inversamente para su correcto funcionamiento, es decir, el cátodo debe ir conectado hacia +5V y en ánodo hacia tierra a través de la resistencia de 10K.
  • El circuito es alimentado poruna bateria por que va a estar girando constantemente y asi no se enreden los cables.
  • Las conexiones del bluettooth con el arduino son cruzadas, es decir, el Tx del BT va con el Rx del Arduino, y el Rx del BT va con el Tx del Arduino.
  • Tener la precaución que al momento de grabar el código al arduino, el módulo de bluetooth debe estar desconectado.

Step 2: Montaje En La Protoboard.

Montaje En La Protoboard.
Se muestra el montaje realizado en Fritzing.
El fotodiodo receptor debe sr colocado de tal forma que apunte directamente hacia el diodo emisor de infrarojos.
El diodo emisor debe ser energizado por una fuente aparte que proporcione 5V.

Step 3: Ubicación Del Diodo Emisor Y Del Receptor.

Ubicación Del Diodo Emisor Y Del Receptor.
Como se dijo anteriormente, estos diodos trabajan en conjunto para detectar la posición, de esta manera, el diodo emisor de infrarojos que se muestra en la parte inferior ( en el protoboard ) está constantemente encendido, y el fotodiodo receptor que se muestra de color café en la parte inferior del protoboard donde está montado el POV cada vez que pasa por el emisor, detecta la luz recibida y envía una señal al arduino para decirle que empieze a "dibujar" las letras.

Step 4: Diagrama En Bloques De La APP Hecha En App Inventor

Diagrama En Bloques De  La APP Hecha En App Inventor
Bloques_App.JPG
Esta es sencilla, como se ve en la figura, sólo se hace uso de un textbox, un botón para enviar el mensaje y unos controles tipo Labels que sirven de información.
En el diagrama de bloques se muestra que primero se selecciona la conexión a Bluetooth a utilizar.
Luego se configura la acción a realizar cuando se presiona el botón, en este caso se envía por bluetotth el texto escrito en el textbox.
Si deseas descargar la APP:Haz clic aca

Step 5: El Código De Arduino

Si deseas descargar el código haz clic aca

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CODIGO:

byte largo=0; //Tamaño de la palabra / Size of the word
char letra; //Almacena cada caracter /Stores each letter
String palabra;
int caracterDepurado;
int leds[]={4,5,6,7,8,9,10}; //Array para los leds
const int sensor=2; // sensor de posición
int estado=0;
int _[] = {0,0,0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0};
int A[] = {0,1,1,1,1,1,1, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 0,1,1,1,1,1,1};
int B[] = {1,1,1,1,1,1,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 0,1,1,0,1,1,0};
int C[] = {0,1,1,1,1,1,0, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1};
int D[] = {1,1,1,1,1,1,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 0,1,1,1,1,1,0};
int E[] = {1,1,1,1,1,1,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1};
int F[] = {1,1,1,1,1,1,1, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0};
int G[] = {1,1,1,1,1,1,1, 1,0,0,0,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,1,1,1};
int H[] = {1,1,1,1,1,1,1, 0,0,0,1,0,0,0, 0,0,0,1,0,0,1, 0,0,0,1,0,0,0, 1,1,1,1,1,1,1};
int I[] = {1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,1,1,1,1,1,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1};
int J[] = {0,0,0,0,1,1,0, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 1,1,1,1,1,1,0};
int K[] = {1,1,1,1,1,1,1, 0,0,0,1,0,0,0, 0,0,1,0,1,0,0, 0,1,0,0,0,1,0, 1,0,0,0,0,0,1};
int L[] = {1,1,1,1,1,1,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1};
int M[] = {1,1,1,1,1,1,1, 0,1,0,0,0,0,0, 0,0,1,1,0,0,0, 0,1,0,0,0,0,0, 1,1,1,1,1,1,1};
int N[] = {1,1,1,1,1,1,1, 0,1,0,0,0,0,0, 0,0,1,0,0,0,0, 0,0,0,1,0,0,0, 1,1,1,1,1,1,1};
int O[] = {0,1,1,1,1,1,0, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 0,1,1,1,1,1,0};
int P[] = {1,1,1,1,1,1,1, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 0,1,1,0,0,0,0};
int Q[] = {0,1,1,1,1,0,0, 1,0,0,0,0,1,0, 1,0,0,0,0,1,0, 1,0,0,0,0,1,0, 0,1,1,1,1,0,1};
int R[] = {1,1,1,1,1,1,1, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 1,0,0,1,0,0,0, 0,1,1,0,1,1,1};
int S[] = {0,1,1,0,0,0,0, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 1,0,0,1,0,0,1, 0,0,0,0,1,1,0};
int T[] = {1,0,0,0,0,0,0, 1,0,0,0,0,0,0, 1,1,1,1,1,1,1, 1,0,0,0,0,0,0, 1,0,0,0,0,0,0};
int U[] = {1,1,1,1,1,1,0, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 1,1,1,1,1,1,0};
int V[] = {1,1,1,1,1,0,0, 0,0,0,0,0,1,0, 0,0,0,0,0,0,1, 0,0,0,0,0,1,0, 1,1,1,1,1,0,0};
int W[] = {1,1,1,1,1,1,1, 0,0,0,0,0,1,0, 0,0,0,0,1,0,0, 0,0,0,0,0,1,0, 1,1,1,1,1,1,1};
int X[] = {1,0,0,0,0,0,1, 0,1,0,0,0,1,0, 0,0,1,1,1,0,0, 0,1,0,0,0,1,0, 1,0,0,0,0,0,1};
int Y[] = {1,1,1,0,0,0,0, 0,0,0,1,0,0,0, 0,0,0,0,1,1,1, 0,0,0,1,0,0,0, 1,1,1,0,0,0,0};
int Z[] = {1,0,0,0,0,1,1, 1,0,0,0,1,0,1, 1,0,0,1,0,0,1, 1,0,1,0,0,0,1, 1,1,0,0,0,0,1};
int espaciado;
int retardo;
void setup() {
// Configuro los puertos de entrada y salida / Setting the ports of the leds to OUTPUT and sensor to INPUT pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(sensor,INPUT);
Serial.begin(9600);
Serial.flush();
//Espacio entre cada letra /Space between each letter
espaciado = 9;
// defining the time dots appear (ms)
retardo =3;
}
//***** Para limpiar la columna / For cleaning the column************
void borrar()
{
for(int z=0;z<7;z++)
{
digitalWrite(z+4,LOW);
}
}
//*******************************************
void imprimir(int caracter[]) { int y;
// Imprime la primera columna /Prints the first column
for (y=0; y<7; y++)
{
digitalWrite(y+4, caracter[y]);
}
delay(retardo);
borrar();
// Imprime la segunda columna /Prints the second column
for (y=0; y<7; y++)
{
digitalWrite(y+4, caracter[y+7]);
}
delay(retardo);
borrar();
// Imprime la tercera columna /Prints the third column
for (y=0; y<7; y++)
{
digitalWrite(y+4, caracter[y+14]);
}
delay(retardo);
borrar();
// Imprime la cuarta columna /Prints the fourth column
for (y=0; y<7; y++)
{
digitalWrite(y+4, caracter[y+21]);
} delay(retardo);
borrar();
// Imprime la quinta columna /Prints the fifth column
for (y=0; y<7; y++)
{
digitalWrite(y+4, caracter[y+28]);
}
delay(retardo);
borrar();
// printing the space between the letters for (y=0; y<7; y++)
{
digitalWrite(y+4, 0);
}
delay(espaciado);
}
//****************************************************************
void loop()
{
if (Serial.available())
{
Serial.flush(); //Limpio el buffer/Clean the buffer
palabra="";
while (Serial.available() >0)
{
delay(5);
letra = Serial.read(); //Lee cada caracter de la palabra //Reads each letter of the word
palabra = palabra+letra;
} // fin del while
} // fin del if
estado = digitalRead(sensor); //verifico si ya pasó por el sensor de posición / check if already cross the position sensor
largo = palabra.length(); //Calculo la longitud de la palabra / Checks the lenght of the word
if(estado==HIGH) //si ya pasó// if has just crossed
{
for(int x=0;x<largo;x++)
{ char caracter = palabra.charAt(x); //Obtengo cada letra y la almacendo en la variable / Obtains each letter and stores at the variable caracterDepurado=(caracter-'0'); if (caracterDepurado>0) //Esto es para evitar que se envien caracteres no deseados
{
switch (caracter)
{
case 'A':
imprimir(A);
break;
case 'B':
imprimir(B);
break;
case 'C':
imprimir(C);
break;
case 'D':
imprimir(D);
break;
case 'E':
imprimir(E);
break;
case 'F':
imprimir(F);
break;
case 'G':
imprimir(G);
break;
case 'H':
imprimir(H);
break;
case 'I':
imprimir(I);
break;
case 'J':
imprimir(J);
break;
case 'K':
imprimir(K);
break;
case 'L':
imprimir(L);
break;
case 'M':
imprimir(M);
break;
case 'N':
imprimir(N);
break;
case 'O':
imprimir(O);
break;
case 'P':
imprimir(P);
break;
case 'Q':
imprimir(Q);
break;
case 'R':
imprimir(R);
break;
case 'S':
imprimir(S);
break;
case 'T':
imprimir(T);
break;
case 'U':
imprimir(U);
break;
case 'V':
imprimir(V);
break;
case 'W':
imprimir(W);
break;
case 'X':
imprimir(X);
break;
case 'Y':
imprimir(Y);
break;
case ' ':
imprimir(_);
break;
} //fin del switch

} //fin del if
} //fin del for
} //fin del if estado
} // fin del loop

Fuente: https://www.instructables.com/id/Arduino-POV-controlado-desde-Android/

Step 6: Video




1) CUBO DE LEDS 3X3X3


Cubo de Leds 3x3x3

Primero que nada, hay que construir una especie de plantilla, para poder posicionar bien los leds y efectuar el doblado de las patillas, sin que se deforme, o que por lo menos parezca un cubo al estar terminado.
Para esto, una madera fina, y un taladro con broca del 5 (justo el tamaño de los leds 5mm), y realizamos la plantilla con los 9 agujeros en forma de cubo y uno en el centro, tal que asi:
Plantilla
Plantilla para cubo de leds 3x3x3
Una vez tengamos la plantilla terminada, colocamos los leds dentro de forma que queden los cátodos (patilla más corta) hacia adentro del cubo. Deben quedar los cátodos hacia adentro ya que son éstos los que conectaremos para formar el primer “nivel” del cubo, así que doblamos y conectamos los cátodos de los leds para que quede un “cátodo común” para todos los leds. Yo heché mano de unas pinzas de cocodrilo y procedemos a soldarlos.

Doblamos los cátodos y nos ayudamos de pinzas
Una vez soldados los cátodos retiramos la estructura que queda, y realizamos el mismo paso 3 veces, para obtener 3 estructuras de 9 leds conectados por sus cátodos, que serán los 3 niveles o filas del cubo.

Estructuras de leds
Una vez que tengamos las estructuras de los leds, procedemos a conectarlas entre sí, y para ello utilizando la misma plantilla colocamos una de las estructuras dentro, con ayuda de unas pinzas de cocodrilo colocamos otra estructura encima y soldamos los ánodos de los leds esta vez, repitiendo el paso para la última estructura y finalizando el cubo.

Estructuras montadas para soldar los ánodos
Y así, finalizamos el cubo, de modo que tenemos un cubo con 9 patillas donde cada una de ellas corresponde al ánodo de los 3 leds de esa misma columna,  y 3 niveles o filas de leds conectados por sus cátodos.
Si lo vieramos de un modo informático, es un array bidimensional de leds, tenemos “columnas” y “filas”, y así es como accederemos a cada uno de los leds con Arduino.
Cubo de Leds 3x3x3
Cubo de Leds 3x3x3
Terminado el cubo procedemos a la conexión con Arduino. Dado que son leds, necesitan de una pequeña resistencia así que conectamos cada uno de los pines del cubo con una resistencia de 220 Ω, a 9 pines digitales del Arduino.
Para conectar los cátodos ó los 3 niveles del cubo, debemos utilizar 3 transistores NPN, en mi caso usé 2N3904.
Así que conectamos cada uno de los 3 niveles al colector de 3 transistores NPN, la base de los transistores se conectaría a los pines digitales del Arduino, y el emisor a masa o GND.
Así utilizamos el transistor en conmutación, de modo que al enviar con Arduino un valor lógico HIGH a uno de los transistores, éste entrará en saturación, “conectando” el colector con el emisor, de forma que el cátodo del diodo led se “conectaría” a masa y encendería.
La forma de conectarlo todo es la siguiente:


Y una vez conectado, declaramos los pines como un array de filas y columnas, y que decir, es simplemente encender unos leds 

CÓDIGO ARDUINO:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int Columnas[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int Filas[] = {12, 11, 10};
int RandFila;     //Variable para fila aleatoria
int RandColumna;  //Variable para columna aleatoria
void setup()
{
  int contador;
  for (int contador = 1; contador < 10; contador++){
    pinMode(Columnas[contador], OUTPUT); }
  for (int contador = 1; contador < 4; contador++){
    pinMode(Filas[contador], OUTPUT); }
}
void loop()
{
  RandLed();
}
void RandLed()
{
  RandFila = random(0,3);
  RandColumna = random(0,9);
  digitalWrite(Filas[RandFila], HIGH);
  digitalWrite(Columnas[RandColumna], HIGH);
  delay(75);
  digitalWrite(Filas[RandFila], LOW);
  digitalWrite(Columnas[RandColumna], LOW);
  delay(50);
}

FUENTE:

https://electronicavm.wordpress.com/2011/07/27/cubo-de-leds-3x3x3-con-arduino/comment-page-6/#comments









1) CUBO DE LEDS 4X4X4



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 .

¿qué vamos a necesitar?

  • Arduino Uno (yo he usado Arduino Duemilanove)
  • Cable rígido para unir los diodos en el cubo
  • 64 diodos led (yo usé diodos leds azules)
  • 16 resistencias de 220 Ohmios
  • Pinzas de cocodrilo
  • Un trozo de porexpan
  • Cables de conexión y placas Board para montar el circuito.
  • Alicates de corte y punta plana de precisión.

El diseño

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 :
structural-diagram1

La construcción

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).
foto-20-05-13-18-32-43
foto-20-05-13-19-28-58
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.

Soldando las cuatro capas.

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.
Lo primero que debe hacer es doblar el último mm de cada ánodo hacia el centro del LED, esto le ayudará a unir las capas entre sí. Sólo tiene que hacer esto con tres de sus capas superiores.cube-bend-anode
A partir de aquí tendremos que darnos maña para completar la tarea, podeis usar:
  1. Separdores de cartón entre capas para facilitar la tarea de soldar los 16 ánodos.
  2. Usar pinzas de cocodrilo para sujetar las capas mientras las sueldo.
Mi consejo es que soldar los ánodos de las esquinas juntos primero. Repita esto para las dos capas restantes y su cubo estará completo.foto-21-05-13-20-35-24

Conexionado y Programa en Arduino

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.
conexion-anodos
foto-21-05-13-23-04-27
Una vez realizadas las conexiones me puedo descargar cualquiera de los dos programas adjuntos, cada uno de ellos muestran animaciones diferentes.
foto-23-01-14-15-42-47
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.
cubecode1
Este gran bloque de código en el medio es donde se desarrollan los patrones de encendio de los leds del cubo. La manera más fácil de pensar en ella es como una animación . Cada cambio en el cubo representa un fotograma de la animación, y cada línea de código representa un fotograma.
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.
Por ejemplo si tenemos esta línea:
B1000,B1000,B1000,B1000, B0000,B0000,B0000,B0000B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
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.
foto-23-01-14-09-35-40
Trata de probar con sus propias animaciones, mi consejo es utilizar los comentarios para darse un recordatorio de lo que hace cada animación. Usted puede escribir un comentario en el programa escribiendo “/ /” y luego el comentario.
foto-21-05-13-23-44-35-1
Fuentes:
  • [http://www.techmadeeasy.co.uk/2013/01/21/make-your-own-4x4x4-led-cube-with-an-arduino/]
  • [http://www.makeuseof.com/tag/how-to-make-a-pulsating-arduino-led-cube-that-looks-like-it-came-from-the-future/]
  • http://www.tecnosalva.com/c%C3%B3mo-hacer-cubo-leds-4x4x4-arduino

Archivos adjuntos

  • pdf Plantilla colocar leds
    Plantilla para colocar los diodos y formar el cubo
    File size: 3 KB Downloads: 910
  • zip sketchs-cubo
    Un par de sketchs para hacer funcionar el cubo con diferentes patrones
    File size: 7 KB Downloads: 1050
---------------------------------------------------------------------------------------------------------------------------------
CÓDIGO ARDUINO-OPCIÓN-2


#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
}

No hay comentarios:

Publicar un comentario