/*
* ==========================================================================
* Autor: Elmer Sorto
* Contacto: [email protected]
*
* LED Canvas - Herramienta de Diseño y Animación para Matrices de LEDs
* Desarrollada para facilitar a los estudiantes de electrónica el diseño
* y la creación de animaciones en matrices de LEDs utilizando la tecnología
* Adafruit NeoPixel.
*
* Este código fuente ha sido generado automáticamente por la herramienta
* LED Canvas, accesible exclusivamente para uso educativo y no comercial.
* Aunque el código generado no es abierto, la herramienta está diseñada
* para apoyar a estudiantes y entusiastas en sus proyectos educativos.
*
* Para soporte técnico o consultas, por favor contactar a [email protected].
* Agradecemos su interés en nuestra herramienta y esperamos que contribuya
* positivamente a sus proyectos educativos y de investigación.
* ==========================================================================
*/
#include <Adafruit_NeoPixel.h>
#define PIN 5 // Pin de datos de la matriz de LEDs
#define NUM_LEDS 256 // Total de LEDs en la matriz
#define BRIGHTNESS 255 // Brillo de los LEDs (0-255)
#define NUM_FRAMES 4 // Cantidad de frames
// Inicializar la matriz de LEDs
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
// Definir la estructura de un frame
struct Frame {
uint16_t index;
uint8_t r, g, b; // RGB components
};
// Definir los frames de la animación
const Frame frames[NUM_FRAMES][256] PROGMEM = {
{{144, 255, 181, 108}, {160, 255, 181, 108}, {176, 255, 181, 108}, {145, 255, 181, 108}, {161, 255, 181, 108}, {177, 255, 181, 108}, {209, 140, 86, 16}, {225, 140, 86, 16}, {130, 246, 57, 19}, {146, 246, 57, 19}, {162, 255, 181, 108}, {210, 5, 84, 177}, {226, 140, 86, 16}, {242, 140, 86, 16}, {67, 140, 86, 16}, {83, 140, 86, 16}, {99, 140, 86, 16}, {131, 246, 57, 19}, {147, 246, 57, 19}, {195, 5, 84, 177}, {211, 5, 84, 177}, {227, 140, 86, 16}, {243, 140, 86, 16}, {36, 246, 57, 19}, {52, 140, 86, 16}, {68, 255, 181, 108}, {84, 255, 181, 108}, {100, 140, 86, 16}, {116, 140, 86, 16}, {132, 246, 57, 19}, {148, 246, 57, 19}, {164, 246, 57, 19}, {180, 0, 89, 193}, {196, 5, 84, 177}, {212, 5, 84, 177}, {228, 5, 84, 177}, {244, 140, 86, 16}, {21, 246, 57, 19}, {37, 246, 57, 19}, {53, 140, 86, 16}, {69, 140, 86, 16}, {85, 140, 86, 16}, {101, 255, 181, 108}, {117, 255, 181, 108}, {133, 246, 57, 19}, {149, 246, 57, 19}, {165, 246, 57, 19}, {181, 0, 89, 193}, {197, 0, 89, 193}, {213, 5, 84, 177}, {229, 5, 84, 177}, {22, 246, 57, 19}, {38, 246, 57, 19}, {54, 140, 86, 16}, {70, 255, 181, 108}, {86, 140, 86, 16}, {102, 255, 181, 108}, {118, 255, 181, 108}, {134, 0, 89, 193}, {150, 0, 89, 193}, {166, 0, 89, 193}, {182, 0, 89, 193}, {198, 0, 89, 193}, {214, 5, 84, 177}, {23, 246, 57, 19}, {39, 246, 57, 19}, {55, 255, 181, 108}, {71, 255, 181, 108}, {87, 255, 181, 108}, {103, 255, 181, 108}, {119, 255, 181, 108}, {135, 0, 89, 193}, {151, 0, 89, 193}, {167, 221, 207, 36}, {183, 0, 89, 193}, {199, 0, 89, 193}, {215, 0, 89, 193}, {24, 246, 57, 19}, {40, 246, 57, 19}, {56, 255, 181, 108}, {72, 255, 181, 108}, {88, 255, 181, 108}, {104, 255, 181, 108}, {120, 255, 181, 108}, {136, 246, 57, 19}, {152, 0, 89, 193}, {168, 0, 89, 193}, {184, 0, 89, 193}, {200, 0, 89, 193}, {216, 0, 89, 193}, {25, 246, 57, 19}, {41, 246, 57, 19}, {57, 49, 87, 0}, {73, 49, 87, 0}, {89, 255, 181, 108}, {105, 92, 56, 8}, {121, 255, 181, 108}, {137, 246, 57, 19}, {153, 246, 57, 19}, {169, 0, 89, 193}, {185, 0, 89, 193}, {201, 0, 89, 193}, {217, 0, 89, 193}, {42, 246, 57, 19}, {58, 255, 181, 108}, {74, 255, 181, 108}, {90, 92, 56, 8}, {106, 92, 56, 8}, {122, 255, 181, 108}, {154, 246, 57, 19}, {170, 0, 89, 193}, {186, 0, 89, 193}, {202, 0, 89, 193}, {218, 0, 89, 193}, {234, 0, 89, 193}, {43, 246, 57, 19}, {75, 243, 171, 99}, {91, 255, 181, 108}, {107, 92, 56, 8}, {123, 255, 181, 108}, {155, 246, 57, 19}, {171, 246, 57, 19}, {187, 0, 89, 193}, {203, 0, 89, 193}, {219, 0, 89, 193}, {235, 0, 89, 193}, {44, 246, 57, 19}, {76, 241, 165, 90}, {92, 243, 171, 99}, {108, 92, 56, 8}, {156, 255, 181, 108}, {172, 246, 57, 19}, {204, 140, 86, 16}, {220, 140, 86, 16}, {236, 140, 86, 16}, {93, 243, 171, 99}, {157, 255, 181, 108}, {173, 255, 181, 108}, {189, 140, 86, 16}, {205, 140, 86, 16}, {221, 140, 86, 16}, {237, 140, 86, 16}, {158, 255, 181, 108}, {174, 255, 181, 108}},
{{51, 140, 86, 16}, {67, 140, 86, 16}, {83, 140, 86, 16}, {20, 246, 57, 19}, {36, 140, 86, 16}, {52, 255, 181, 108}, {68, 255, 181, 108}, {84, 140, 86, 16}, {100, 140, 86, 16}, {148, 246, 57, 19}, {164, 0, 89, 193}, {180, 0, 89, 193}, {196, 0, 89, 193}, {212, 0, 89, 193}, {228, 140, 86, 16}, {5, 246, 57, 19}, {21, 246, 57, 19}, {37, 140, 86, 16}, {53, 140, 86, 16}, {69, 140, 86, 16}, {85, 255, 181, 108}, {101, 255, 181, 108}, {117, 246, 57, 19}, {133, 246, 57, 19}, {149, 246, 57, 19}, {165, 246, 57, 19}, {181, 255, 181, 108}, {197, 255, 181, 108}, {213, 0, 89, 193}, {229, 140, 86, 16}, {6, 246, 57, 19}, {22, 246, 57, 19}, {38, 140, 86, 16}, {54, 255, 181, 108}, {70, 140, 86, 16}, {86, 255, 181, 108}, {102, 255, 181, 108}, {118, 246, 57, 19}, {134, 246, 57, 19}, {150, 246, 57, 19}, {166, 255, 181, 108}, {182, 255, 181, 108}, {198, 255, 181, 108}, {214, 140, 86, 16}, {230, 140, 86, 16}, {7, 246, 57, 19}, {23, 246, 57, 19}, {39, 255, 181, 108}, {55, 255, 181, 108}, {71, 255, 181, 108}, {87, 255, 181, 108}, {103, 255, 181, 108}, {119, 0, 89, 193}, {135, 0, 89, 193}, {151, 246, 57, 19}, {167, 0, 89, 193}, {183, 255, 181, 108}, {199, 0, 89, 193}, {215, 0, 89, 193}, {231, 0, 89, 193}, {8, 246, 57, 19}, {24, 246, 57, 19}, {40, 255, 181, 108}, {56, 255, 181, 108}, {72, 255, 181, 108}, {88, 255, 181, 108}, {104, 255, 181, 108}, {120, 0, 89, 193}, {136, 0, 89, 193}, {152, 0, 89, 193}, {168, 0, 89, 193}, {184, 0, 89, 193}, {200, 0, 89, 193}, {216, 0, 89, 193}, {232, 0, 89, 193}, {248, 140, 86, 16}, {9, 246, 57, 19}, {25, 246, 57, 19}, {41, 49, 87, 0}, {57, 49, 87, 0}, {73, 255, 181, 108}, {89, 92, 56, 8}, {105, 255, 181, 108}, {121, 246, 57, 19}, {137, 0, 89, 193}, {153, 0, 89, 193}, {169, 0, 89, 193}, {185, 0, 89, 193}, {201, 0, 89, 193}, {217, 0, 89, 193}, {233, 0, 89, 193}, {249, 140, 86, 16}, {26, 246, 57, 19}, {42, 255, 181, 108}, {58, 255, 181, 108}, {74, 92, 56, 8}, {90, 92, 56, 8}, {106, 255, 181, 108}, {138, 246, 57, 19}, {154, 246, 57, 19}, {170, 0, 89, 193}, {186, 0, 89, 193}, {202, 0, 89, 193}, {218, 0, 89, 193}, {234, 140, 86, 16}, {250, 140, 86, 16}, {27, 246, 57, 19}, {59, 243, 171, 99}, {75, 255, 181, 108}, {91, 92, 56, 8}, {107, 255, 181, 108}, {155, 246, 57, 19}, {171, 255, 181, 108}, {187, 255, 181, 108}, {219, 0, 89, 193}, {235, 140, 86, 16}, {251, 140, 86, 16}, {28, 246, 57, 19}, {60, 241, 165, 90}, {76, 243, 171, 99}, {92, 92, 56, 8}, {172, 255, 181, 108}, {252, 140, 86, 16}, {77, 243, 171, 99}},
{{131, 246, 57, 19}, {147, 246, 57, 19}, {163, 255, 181, 108}, {179, 0, 89, 193}, {195, 0, 89, 193}, {52, 140, 86, 16}, {68, 140, 86, 16}, {84, 140, 86, 16}, {116, 246, 57, 19}, {132, 0, 89, 193}, {148, 0, 89, 193}, {164, 0, 89, 193}, {180, 0, 89, 193}, {196, 0, 89, 193}, {212, 0, 89, 193}, {228, 0, 89, 193}, {244, 140, 86, 16}, {21, 246, 57, 19}, {37, 140, 86, 16}, {53, 255, 181, 108}, {69, 255, 181, 108}, {85, 140, 86, 16}, {101, 140, 86, 16}, {117, 0, 89, 193}, {133, 246, 57, 19}, {149, 0, 89, 193}, {165, 0, 89, 193}, {181, 0, 89, 193}, {197, 0, 89, 193}, {213, 0, 89, 193}, {229, 0, 89, 193}, {245, 140, 86, 16}, {6, 246, 57, 19}, {22, 246, 57, 19}, {38, 140, 86, 16}, {54, 140, 86, 16}, {70, 140, 86, 16}, {86, 255, 181, 108}, {102, 255, 181, 108}, {118, 246, 57, 19}, {134, 246, 57, 19}, {150, 246, 57, 19}, {166, 0, 89, 193}, {182, 0, 89, 193}, {198, 0, 89, 193}, {214, 0, 89, 193}, {230, 140, 86, 16}, {246, 140, 86, 16}, {7, 246, 57, 19}, {23, 246, 57, 19}, {39, 140, 86, 16}, {55, 255, 181, 108}, {71, 140, 86, 16}, {87, 255, 181, 108}, {103, 255, 181, 108}, {119, 246, 57, 19}, {135, 246, 57, 19}, {151, 246, 57, 19}, {167, 246, 57, 19}, {183, 246, 57, 19}, {199, 0, 89, 193}, {215, 0, 89, 193}, {231, 140, 86, 16}, {247, 140, 86, 16}, {8, 246, 57, 19}, {24, 246, 57, 19}, {40, 255, 181, 108}, {56, 255, 181, 108}, {72, 255, 181, 108}, {88, 255, 181, 108}, {104, 255, 181, 108}, {120, 0, 89, 193}, {136, 246, 57, 19}, {152, 246, 57, 19}, {168, 246, 57, 19}, {184, 246, 57, 19}, {200, 255, 181, 108}, {216, 0, 89, 193}, {232, 0, 89, 193}, {248, 140, 86, 16}, {9, 246, 57, 19}, {25, 246, 57, 19}, {41, 255, 181, 108}, {57, 255, 181, 108}, {73, 255, 181, 108}, {89, 255, 181, 108}, {105, 255, 181, 108}, {121, 0, 89, 193}, {137, 0, 89, 193}, {153, 246, 57, 19}, {169, 246, 57, 19}, {185, 255, 181, 108}, {201, 255, 181, 108}, {217, 255, 181, 108}, {10, 246, 57, 19}, {26, 246, 57, 19}, {42, 49, 87, 0}, {58, 49, 87, 0}, {74, 255, 181, 108}, {90, 92, 56, 8}, {106, 255, 181, 108}, {170, 246, 57, 19}, {186, 255, 181, 108}, {202, 255, 181, 108}, {27, 246, 57, 19}, {43, 255, 181, 108}, {59, 255, 181, 108}, {75, 92, 56, 8}, {91, 92, 56, 8}, {107, 255, 181, 108}, {28, 246, 57, 19}, {60, 243, 171, 99}, {76, 255, 181, 108}, {92, 92, 56, 8}, {108, 255, 181, 108}, {29, 246, 57, 19}, {61, 241, 165, 90}, {77, 243, 171, 99}, {93, 92, 56, 8}, {78, 243, 171, 99}},
{{145, 255, 181, 108}, {161, 255, 181, 108}, {209, 140, 86, 16}, {225, 140, 86, 16}, {130, 246, 57, 19}, {146, 246, 57, 19}, {162, 255, 181, 108}, {210, 5, 84, 177}, {226, 140, 86, 16}, {242, 140, 86, 16}, {67, 140, 86, 16}, {83, 140, 86, 16}, {99, 140, 86, 16}, {131, 246, 57, 19}, {147, 246, 57, 19}, {195, 5, 84, 177}, {211, 5, 84, 177}, {227, 140, 86, 16}, {243, 140, 86, 16}, {36, 246, 57, 19}, {52, 140, 86, 16}, {68, 255, 181, 108}, {84, 255, 181, 108}, {100, 140, 86, 16}, {116, 140, 86, 16}, {132, 246, 57, 19}, {148, 246, 57, 19}, {164, 246, 57, 19}, {180, 0, 89, 193}, {196, 5, 84, 177}, {212, 5, 84, 177}, {228, 5, 84, 177}, {244, 140, 86, 16}, {21, 246, 57, 19}, {37, 246, 57, 19}, {53, 140, 86, 16}, {69, 140, 86, 16}, {85, 140, 86, 16}, {101, 255, 181, 108}, {117, 255, 181, 108}, {133, 0, 89, 193}, {149, 0, 89, 193}, {165, 0, 89, 193}, {181, 0, 89, 193}, {197, 0, 89, 193}, {213, 5, 84, 177}, {229, 5, 84, 177}, {22, 246, 57, 19}, {38, 246, 57, 19}, {54, 140, 86, 16}, {70, 255, 181, 108}, {86, 140, 86, 16}, {102, 255, 181, 108}, {118, 255, 181, 108}, {134, 246, 57, 19}, {150, 0, 89, 193}, {166, 0, 89, 193}, {182, 0, 89, 193}, {198, 0, 89, 193}, {214, 5, 84, 177}, {23, 246, 57, 19}, {39, 246, 57, 19}, {55, 255, 181, 108}, {71, 255, 181, 108}, {87, 255, 181, 108}, {103, 255, 181, 108}, {119, 255, 181, 108}, {135, 246, 57, 19}, {151, 246, 57, 19}, {167, 0, 89, 193}, {183, 0, 89, 193}, {199, 0, 89, 193}, {215, 0, 89, 193}, {24, 246, 57, 19}, {40, 246, 57, 19}, {56, 255, 181, 108}, {72, 255, 181, 108}, {88, 255, 181, 108}, {104, 255, 181, 108}, {120, 255, 181, 108}, {136, 246, 57, 19}, {152, 246, 57, 19}, {168, 0, 89, 193}, {184, 0, 89, 193}, {200, 0, 89, 193}, {216, 0, 89, 193}, {25, 246, 57, 19}, {41, 246, 57, 19}, {57, 49, 87, 0}, {73, 49, 87, 0}, {89, 255, 181, 108}, {105, 92, 56, 8}, {121, 255, 181, 108}, {137, 246, 57, 19}, {153, 246, 57, 19}, {169, 246, 57, 19}, {185, 0, 89, 193}, {201, 0, 89, 193}, {217, 0, 89, 193}, {42, 246, 57, 19}, {58, 255, 181, 108}, {74, 255, 181, 108}, {90, 92, 56, 8}, {106, 92, 56, 8}, {122, 255, 181, 108}, {154, 246, 57, 19}, {170, 246, 57, 19}, {186, 0, 89, 193}, {202, 0, 89, 193}, {218, 0, 89, 193}, {234, 0, 89, 193}, {43, 246, 57, 19}, {75, 243, 171, 99}, {91, 255, 181, 108}, {107, 92, 56, 8}, {123, 255, 181, 108}, {155, 246, 57, 19}, {171, 246, 57, 19}, {187, 0, 89, 193}, {203, 0, 89, 193}, {219, 0, 89, 193}, {235, 0, 89, 193}, {44, 246, 57, 19}, {76, 241, 165, 90}, {92, 243, 171, 99}, {108, 92, 56, 8}, {156, 255, 181, 108}, {172, 246, 57, 19}, {204, 140, 86, 16}, {220, 140, 86, 16}, {236, 140, 86, 16}, {93, 243, 171, 99}, {157, 255, 181, 108}, {173, 255, 181, 108}, {189, 140, 86, 16}, {205, 140, 86, 16}, {221, 140, 86, 16}, {237, 140, 86, 16}, {158, 255, 181, 108}, {174, 255, 181, 108}}
};
void setup() {
strip.begin();
strip.setBrightness(BRIGHTNESS);
strip.show(); // Inicializar todos los LEDs apagados
}
void displayFrame(const Frame* currentFrame, int size) {
strip.clear(); // Clear all LEDs
for (int i = 0; i < size; i++) {
Frame f;
// Read each frame component from PROGMEM
memcpy_P(&f, ¤tFrame[i], sizeof(Frame));
uint32_t color = strip.Color(f.r, f.g, f.b); // Convert to packed color
strip.setPixelColor(f.index, color);
}
strip.show();
delay(150);
}
void loop() {
int frameCount = sizeof(frames) / sizeof(frames[0]);
bool reverse = false;
int i = 0;
while (true) {
if (!reverse) {
for (; i < frameCount; i++) {
displayFrame(frames[i], 256);
}
reverse = true;
i -= 2;
} else {
for (; i >= 0; i--) {
displayFrame(frames[i], 256);
}
reverse = false;
i += 2;
}
}
}