Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #include <avr/pgmspace.h> // allows use of PROGMEM to store patterns in flash
  2.  
  3. #define CUBESIZE 4 //Definimos el tamaño del cubo
  4. #define PLANESIZE CUBESIZE*CUBESIZE
  5. #define PLANETIME 2222 // Tiempo que refresca
  6. #define TIMECONST 10 //El tiempo que se encenderá
  7.  
  8.  
  9. prog_uchar PROGMEM PatternTable[] = {
  10. // Aqui hacemos que encienda cada led con 1 y apague con 0//Hacer la C
  11.  
  12. //B0000,B0000,B0000,B1111,  B0000,B0000,B0000,B1000,  B0000,B0000,B0000,B1000,  B0000,B0000,B0000,B1111,10,
  13. //B0000,B0000,B1111,B1111,  B0000,B0000,B1000,B1000,  B0000,B0000,B1000,B1000,  B0000,B0000,B1111,B1111,10,
  14. //B0000,B1111,B1111,B1111,  B0000,B1000,B1000,B1000,  B0000,B1000,B1000,B1000,  B0000,B1111,B1111,B1111,10,
  15. //B1111,B1111,B1111,B1111,  B1000,B1000,B1000,B1000,  B1000,B1000,B1000,B1000,  B1111,B1111,B1111,B1111,1000,
  16. //
  17. ////La O
  18. //B0000,B0000,B0000,B1111,  B0000,B0000,B0000,B1001,  B0000,B0000,B0000,B1001,  B0000,B0000,B0000,B1111,10,
  19. //B0000,B0000,B1111,B1111,  B0000,B0000,B1001,B1001,  B0000,B0000,B1001,B1001,  B0000,B0000,B1111,B1111,10,
  20. //B0000,B1111,B1111,B1111,  B0000,B1001,B1001,B1001,  B0000,B1001,B1001,B1001,  B0000,B1111,B1111,B1111,10,
  21. //B1111,B1111,B1111,B1111,  B1001,B1001,B1001,B1001,  B1001,B1001,B1001,B1001,  B1111,B1111,B1111,B1111,1000,
  22. //
  23. ////La D
  24. //B0000,B0000,B0000,B1110,  B0000,B0000,B0000,B1000,  B0000,B0000,B0000,B1001,  B0000,B0000,B0000,B1110,10,
  25. //B0000,B0000,B1111,B1110,  B0000,B0000,B1001,B1000,  B0000,B0000,B1001,B1001,  B0000,B0000,B1111,B1110,10,
  26. //B0000,B1111,B1111,B1110,  B0000,B1001,B1001,B1000,  B0000,B1001,B1001,B1001,  B0000,B1111,B1111,B1110,10,
  27. //B1111,B1111,B1111,B1110,  B1001,B1001,B1001,B1000,  B1001,B1001,B1001,B1001,  B1111,B1111,B1111,B1110,1000,
  28. //B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
  29.  
  30. // Este apaga todos los leds
  31. B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 0
  32. };
  33.  
  34. /*
  35. ** Definición de los pines en conjunto hace que sea más fácil para reorganizar cómo está cableado cubo
  36. ** Tenga en cuenta que las entradas analógicas A0-A5 también son salidas digitales 14-19!
  37. ** Pin DigitalOut0 (RX de serie) y AnalogIn5 se dejan abiertas para aplicaciones futura
  38. */
  39.  
  40. int LEDPin[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
  41. int PlanePin[] = {16, 17, 18, 19};
  42.  
  43. // Inicialización
  44. void setup()
  45. {
  46. int pin; // Contador del ciclo
  47. // configurar pines LED como salida (HIGH activo)
  48. for (pin=0; pin<PLANESIZE; pin++) {
  49. pinMode( LEDPin[pin], OUTPUT );
  50. }
  51. // establecer los pins del plano como salidas (LOW activo)
  52. for (pin=0; pin<CUBESIZE; pin++) {
  53. pinMode( PlanePin[pin], OUTPUT );
  54. }
  55. }
  56.  
  57. // patrón de visualización en la tabla hasta DisplayTime es cero (luego repetir)
  58. void loop()
  59. {
  60. //Declaramos las variables
  61. byte PatternBuf[PLANESIZE]; // guardamos el patrón actual de PatternTable
  62. int PatternIdx;
  63. byte DisplayTime;
  64. unsigned long EndTime;
  65. int plane; // contador del ciclo del cubo en la actualización
  66. int patbufidx;
  67. int ledrow;
  68. int ledcol;
  69. int ledpin;
  70.  
  71. // Inicialice PatternIdx al principio de la tabla patrón
  72. PatternIdx = 0;
  73. // lazo sobre entradas en la tabla de patrón - mientras DisplayTime> 0
  74. do {
  75. // leer el patrón de PROGMEM y ahorrar en el arreglo
  76. memcpy_P( PatternBuf, PatternTable+PatternIdx, PLANESIZE );
  77. PatternIdx += PLANESIZE;
  78. // leer DisplayTime de PROGMEM e incrementar el índice
  79. DisplayTime = pgm_read_byte_near( PatternTable + PatternIdx++ );
  80. // calcular EndTime de hora actual (ms) y DisplayTime
  81. EndTime = millis() + ((unsigned long) DisplayTime) * TIMECONST;
  82.  
  83. // ciclo while DisplayTime> 0 y la hora actual <EndTime
  84. while ( millis() < EndTime ) {
  85. patbufidx = 0; // resetear el contador de índice a principios de búfer
  86. for (plane=0; plane<CUBESIZE; plane++) {
  87. if (plane==0) {
  88. digitalWrite( PlanePin[CUBESIZE-1], HIGH );
  89. } else {
  90. digitalWrite( PlanePin[plane-1], HIGH );
  91. }
  92.  
  93. // cargar los datos actuales del patrón plano en puertos
  94. ledpin = 0;
  95. for (ledrow=0; ledrow<CUBESIZE; ledrow++) {
  96. for (ledcol=0; ledcol<CUBESIZE; ledcol++) {
  97. digitalWrite( LEDPin[ledpin++], PatternBuf[patbufidx] & (1 << ledcol) );
  98. }
  99. patbufidx++;
  100. }
  101.  
  102. // Encender el plano actual
  103. digitalWrite( PlanePin[plane], LOW );
  104. // espera PLANETIME definida anteriormente
  105. delayMicroseconds( PLANETIME );
  106. }
  107. }
  108. } while (DisplayTime > 0); // leer los patrones hasta el tiempo = 0, lo que indica final
  109. }