Paso 5: Programación de tiempo!
He encontrado este impresionante programa aquí:http://www.stationinthemetro.com/index.php/Archives/2008/01/19/makedc-LED-Cube-Workshop/
Te ahorrará un viaje y el código postal aquí. Esta carga hasta arduino mediante el entorno de arduino que se pueden bajar en arduino.cc (una web).
Basado en ledcube.c de hacer: podcast de fin de semana de 07 de septiembre de 2007
http://blog.Makezine.com/Archive/2007/09/make_a_pocket_led_cube_we.html
Animación personalizada programada por Mark Boszko, http://stationinthemetro.com
*/
#include < avr/pgmspace.h > / / permite el uso de PROGMEM para almacenar patrones de flash
#define CUBESIZE 3
#define PLANESIZE CUBESIZE * CUBESIZE
#define PLANETIME 3333 / / tiempo de cada plano se muestra en nosotros -> refresco de 100 Hz
#define TIMECONST 20 / / multiplica DisplayTime para obtener ms - = ¿por qué no 100?
Tabla de patrón de LED en PROGMEM - la última columna es tiempo de visualización en unidades de 100ms
TODO esto podría ser mucho más compacto, pero no con la representación del patrón binario
prog_uchar PROGMEM PatternTable [] = {}
parpadea el encendido y apagado
B111 B111, B111, B111, B111, B111, B111, B111, B111, 5,
B000 B000, B000, B000, B000, B000, B000, B000, B000, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 5,
B000 B000, B000, B000, B000, B000, B000, B000, B000, 1,
cada LED de destello en secuencia:
Izquierda -> la columna de la derecha, luego arriba -> fila inferior, luego superior -> plano inferior
B100, B000, B000, B000, B000, B000, B000, B000, B000, 1,
B010 B000, B000, B000, B000, B000, B000, B000, B000, 1,
B001 B000, B000, B000, B000, B000, B000, B000, B000, 1,
B000 B100, B000, B000, B000, B000, B000, B000, B000, 1,
B000, B010, B000, B000, B000, B000, B000, B000, B000, 1,
B000 B001, B000, B000, B000, B000, B000, B000, B000, 1,
B000 B000, B100, B000, B000, B000, B000, B000, B000, 1,
B000 B000, B010, B000, B000, B000, B000, B000, B000, 1,
B000 B000, B001, B000, B000, B000, B000, B000, B000, 1,
B000 B000, B000, B100, B000, B000, B000, B000, B000, 1,
B000 B000, B000, B010, B000, B000, B000, B000, B000, 1,
B000 B000, B000, B001, B000, B000, B000, B000, B000, 1,
B000 B000, B000, B000, B100, B000, B000, B000, B000, 1,
B000 B000, B000, B000, B010, B000, B000, B000, B000, 1,
B000 B000, B000, B000, B001, B000, B000, B000, B000, 1,
B000 B000, B000, B000, B000, B100, B000, B000, B000, 1,
B000 B000, B000, B000, B000, B010, B000, B000, B000, 1,
B000 B000, B000, B000, B000, B001, B000, B000, B000, 1,
B000 B000, B000, B000, B000, B000, B100, B000, B000, 1,
B000 B000, B000, B000, B000, B000, B010, B000, B000, 1,
B000 B000, B000, B000, B000, B000, B001, B000, B000, 1,
B000 B000, B000, B000, B000, B000, B000, B100, B000, 1,
B000 B000, B000, B000, B000, B000, B000, B010, B000, 1,
B000 B000, B000, B000, B000, B000, B000, B001, B000, 1,
B000 B000, B000, B000, B000, B000, B000, B000, B100, 1,
B000 B000, B000, B000, B000, B000, B000, B000, B010, 1,
B000 B000, B000, B000, B000, B000, B000, B000, B001, 10,
Un pequeño cubo - divertido cubo grande
B000 B000, B000, B000, B011, B011, B000, B011, B011, 10,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 10,
B000 B000, B000, B000, B011, B011, B000, B011, B011, 5,
B000 B000, B000, B000, B000, B000, B000, B000, B001, 2,
B000 B000, B000, B000, B011, B011, B000, B011, B011, 2,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 2,
B000 B000, B000, B000, B011, B011, B000, B011, B011, 2,
B000 B000, B000, B000, B000, B000, B000, B000, B001, 2,
B000 B000, B000, B000, B011, B011, B000, B011, B011, 2,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B000 B000, B000, B000, B011, B011, B000, B011, B011, 1,
B000 B000, B000, B000, B000, B000, B000, B000, B001, 1,
B000 B000, B000, B000, B011, B011, B000, B011, B011, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B110, B110, B000, B110, B110, B000, B000, B000, B000, 1,
B100, B000, B000, B000, B000, B000, B000, B000, B000, 1,
B110, B110, B000, B110, B110, B000, B000, B000, B000, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B000 B000, B000, B000, B011, B011, B000, B011, B011, 1,
B000 B000, B000, B000, B000, B000, B000, B000, B001, 1,
B000 B000, B000, B000, B011, B011, B000, B011, B011, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B110, B110, B000, B110, B110, B000, B000, B000, B000, 1,
B100, B000, B000, B000, B000, B000, B000, B000, B000, 1,
B110, B110, B000, B110, B110, B000, B000, B000, B000, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B000 B011 B011, B000, B011, B011, B000, B000, B000, 1,
B000 B000, B001, B000, B000, B000, B000, B000, B000, 1,
B000 B011 B011, B000, B011, B011, B000, B000, B000, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B000 B000, B000, B110, B110, B000, B110, B110, B000, 1,
B000 B000, B000, B000, B000, B000, B100, B000, B000, 1,
B000 B000, B000, B110, B110, B000, B110, B110, B000, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B000 B011 B011, B000, B011, B011, B000, B000, B000, 1,
B000 B000, B001, B000, B000, B000, B000, B000, B000, 1,
B000 B011 B011, B000, B011, B011, B000, B000, B000, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B000 B000, B000, B110, B110, B000, B110, B110, B000, 1,
B000 B000, B000, B000, B000, B000, B100, B000, B000, 1,
B000 B000, B000, B110, B110, B000, B110, B110, B000, 1,
Paño de diagonal, comenzando en el centro
B111 B111, B111, B111, B111, B111, B111, B111, B111, 5,
B111 B111, B111, B111, B111, B111, B111, B101, B111, 1,
B111 B111, B111, B111, B101, B111, B111, B101, B111, 1,
B111 B111, B111, B111, B101, B111, B111, B100, B111, 1,
B111, B101, B111, B111, B100, B111, B111, B100, B110, 1,
B111, B101, B111, B111, B100, B111, B111, B100, B110, 1,
B111 B011 B111, B111, B100, B110, B111, B100, B100, 1,
B111, B100, B110, B111, B100, B100, B111, B100, B000, 1,
B111, B100, B100, B111, B100, B000, B111, B000, B000, 1,
B111, B100, B000, B111, B000, B000, B011, B000, B000, 1,
B111 B000, B000, B011, B000, B000, B001, B001, B000, 1,
2-LED diaginal amplia raya que orbita el cubo
B011 B000, B000, B001, B001, B000, B000, B001, B001, 1,
B001 B001, B000, B000, B001, B001, B000, B000, B011, 1,
B000 B001, B001, B000, B000, B011, B000, B000, B110, 1,
B000 B000 B011, B000, B000, B110, B000, B100, B100, 1,
B000 B000, B110, B000, B100, B100, B100, B100, B000, 1,
B000 B100, B100, B100, B100, B000, B110, B000, B000, 1,
B100, B100, B000, B110, B000, B000, B011, B000, B000, 1,
B110 B000, B000, B011, B000, B000, B001, B001, B000, 1,
Ahora, con centro flashies, sabor
B011 B000, B000, B001, B001, B000, B000, B011, B001, 1,
B001 B001, B000, B000, B001, B001, B000, B000, B011, 1,
B000 B001, B001, B000, B000, B011, B000, B010, B110, 1,
B000 B000 B011, B000, B000, B110, B000, B100, B100, 1,
B000 B000, B110, B000, B100, B100, B100, B110, B000, 1,
B000 B100, B100, B100, B100, B000, B110, B000, B000, 1,
B100, B100, B000, B110, B000, B000, B011, B010, B000, 1,
B110 B000, B000, B011, B000, B000, B001, B001, B000, 1,
B011 B000, B000, B001, B011, B000, B000, B001, B001, 1,
B001 B001, B000, B000, B001, B001, B000, B000, B011, 1,
B000 B001, B001, B000, B010, B011, B000, B000, B110, 1,
B000 B000 B011, B000, B000, B110, B000, B100, B100, 1,
B000 B000, B110, B000, B110, B100, B100, B100, B000, 1,
B000 B100, B100, B100, B100, B000, B110, B000, B000, 1,
B100, B100, B000, B110, B010, B000, B011, B000, B000, 1,
B110 B000, B000, B011, B000, B000, B001, B001, B000, 1,
B011 B010, B000, B001, B001, B000, B000, B001, B001, 1,
B001 B001, B000, B000, B001, B001, B000, B000, B011, 1,
B000 B011, B001, B000, B000, B011, B000, B000, B110, 1,
B000 B000 B011, B000, B000, B110, B000, B100, B100, 1,
B000, B010, B110, B000, B100, B100, B100, B100, B000, 1,
B000 B100, B100, B100, B100, B000, B110, B000, B000, 1,
B100, B110, B000, B110, B000, B000, B011, B000, B000, 1,
B110 B000, B000, B011, B000, B000, B001, B001, B000, 1,
Terminando
B001 B001, B000, B000, B001, B001, B000, B000, B001, 1,
B001 B001, B000, B000, B001, B001, B000, B000, B001, 1,
B000 B001, B001, B000, B000, B001, B000, B000, B001, 1,
B000 B000, B001, B000, B000, B001, B000, B000, B001, 1,
B000 B000, B000, B000, B000, B001, B000, B000, B001, 1,
B000 B000, B000, B000, B000, B000, B000, B000, B001, 5,
B000 B000, B000, B000, B000, B000, B000, B000, B000, 3,
B000 B000, B000, B000, B000, B000, B000, B000, B001, 5,
B000 B000, B000, B000, B000, B000, B000, B000, B000, 3,
B000 B000, B000, B000, B000, B000, B000, B000, B001, 5,
B000 B000, B000, B000, B000, B000, B000, B000, B000, 3,
se trata de un elemento ficticio para el final de la tabla (duración = 0)
B000 B000, B000, B000, B000, B000, B000, B000, B000, 0
};
/*
** Definición de pines de matriz facilita cambiar cómo se cablea el cubo
** Ajustar números aquí hasta que parpadean en orden - L a R, T a B
** Nota que entradas analógicas 0-5 también son salidas digitales 14-19.
** Pin DigitalOut0 (serial RX) y AnalogIn5 se dejan abierta para futuras aplicaciones
*/
int LEDPin [] = {16, 3, 1, 15, 4, 6, 14, 5, 7};
int [] PlanePin = {19, 18, 17};
inicialización de
void setup()
{
int pin; contador de bucle
configura pines del LED como salida (activo alto)
para (pin = 0; pin < PLANESIZE; pin ++) {}
pinMode (LEDPin [pin], salida);
}
configurar pines plano como salidas (activo bajo)
para (pin = 0; pin < CUBESIZE; pin ++) {}
pinMode (PlanePin [pin], salida);
}
}
muestra patrón en mesa hasta DisplayTime es cero (y repetir)
void loop()
{
declarar variables
byte PatternBuf [PLANESIZE]; guarda el patrón actual de PatternTable
int PatternIdx;
byte DisplayTime; tiempo * 100ms para mostrar configuración
EndTime largo sin firmar;
plano de int. contador de bucle para actualización de cubo
int patbufidx; índices que byte del buffer patrón
int ledrow; cuenta con LEDs en bucle de actualización
int ledcol; cuenta con LEDs en bucle de actualización
int ledpin; cuenta con LEDs en bucle de actualización
Inicializar PatternIdx al principio de la tabla patrón
PatternIdx = 0;
lazo sobre las entradas de tabla de patrón - mientras DisplayTime > 0
{}
Lee el patrón de PROGMEM y guardar en array
memcpy_P (PatternBuf, PatternTable + PatternIdx, PLANESIZE);
PatternIdx += PLANESIZE;
leer DisplayTime del índice PROGMEM y el incremento de
DisplayTime = pgm_read_byte_near (PatternTable + PatternIdx ++);
calcular EndTime del actual tiempo (ms) y DisplayTime
EndTime = millis() + ((unsigned long) DisplayTime) * TIMECONST;
bucle mientras DisplayTime > tiempo 0 y actual < EndTime
mientras que (millis() < EndTime) {}
patbufidx = 0; reiniciar contador de índice al principio del buffer
lazo sobre planos
para (plano = 0; plano < CUBESIZE; plano ++) {}
Apague el plano anterior
Si (plano == 0) {}
digitalWrite (PlanePin [CUBESIZE-1], alto);
} else {}
digitalWrite (PlanePin [plano-1], alto);
}
datos actuales de patrón plano de carga en puertos
ledPin = 0;
para (ledrow = 0; ledrow < CUBESIZE; ledrow ++) {}
para (ledcol = 0; ledcol < CUBESIZE; ledcol ++) {}
digitalWrite (LEDPin [ledpin ++], PatternBuf [patbufidx] & (1 << ledcol));
}
patbufidx ++;
}
encender el avión actual
digitalWrite (PlanePin [avión], LOW);
retrasar PLANETIME nos
delayMicroseconds (PLANETIME);
} / / avión
} / / mientras < EndTime
} mientras (DisplayTime > 0); leer patrones hasta el momento = 0 que indica el final
}
{6 comentarios y Léelos a continuación o añadir uno}