¿Cómo utilizar el rompecabezas de la unidad M5Stack?
¿Qué es Unit Puzzle?
Recientemente, M5Stack lanzó un nuevo producto llamado Unit Puzzle. Unit Puzzle es una unidad de control de luz multicolor que consta de una matriz RGB de 8x8 formada por 64 LED RGB WS2812E.
Lo vi por primera vez en una feria MakerFaire como esta:
Eso me hace feliz, sabes que nos gusta mucho el LED, así que conseguí un rompecabezas de 10 unidades de inmediato. Divirtámonos un poco.
Conexión de hardware
Sobre el microcontrolador, ustedes saben cuál es mi favorito. Así es, M5Stack ATOM Lite.
Y la unidad incluía un rompecabezas unitario, un conector, un cable Grove. Eso significa que podemos juntar todas las unidades.
Vamos a ponerlos juntos.
Parte del código
Primera versión
//The unit puzzle used WS2812E, which means Adafruit_NeoPixel library is our best choice #include //And define part: #define PIN 26 #define NUMPIXELS 512 //The official recommendation for long-term lighting is 10% brightness, so we use 25 #define BRIGHTNESS 25 // Brightness range(0-255) Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); //I need display letters 'OPENELAB' int letters[8][64] = { {30, 38, 21, 45, 20, 44, 19, 43, 18, 42, 17, 41, 24, 32}, // "O" {22, 30, 38, 46, 21, 45, 20, 44, 19, 27, 35, 43, 18, 17, 16}, // "P" {22, 30, 38, 46, 21, 20, 19, 27, 35, 43, 18, 17, 16, 24, 32, 40}, // "E" {22, 46, 21, 45, 20, 28, 44, 19, 27, 35, 43, 18, 34, 42, 17, 41, 16, 40}, // "N" {22, 30, 38, 46, 21, 20, 19, 27, 35, 43, 18, 17, 16, 24, 32, 40}, // "E" {22, 21, 20, 19, 18, 17, 16, 24, 32, 40}, // "L" {30, 38, 21, 45, 20, 44, 19, 27, 35, 43, 18, 42, 17, 41, 16, 40}, // "A" {22, 30, 38, 21, 45, 20, 36, 19, 27, 18, 34, 17, 41, 16, 24, 32} // "B" }; //Initialize the NeoPixel library, set the brightness, turn off all pixels, call the function that displays text, and then loop empty void setup() { pixels.begin(); pixels.setBrightness(BRIGHTNESS); pixels.show(); displayText(); } void loop() { } // Clear all lamp beads void displayText() { pixels.clear(); // Set the position of the lamp beads to display each character for (int charIndex = 0; charIndex < 8; charIndex++) { for (int i = 0; i < 64; i++) { if (letters[charIndex][i] != -1) { int pixelIndex = charIndex * 64 + letters[charIndex][i]; píxeles.setPixelColor(pixelIndex, píxeles.Color(255, 0, 0)); // Establece el píxel en la posición especificada en rojo } } } píxeles.mostrar();
Píxeles de Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
Primer espectáculo
Pantalla muy perfecta, pero cada píxel 0 se iluminó. Demasiado extraño, debería usarse para posicionamiento. No importa, apaguémoslo.
Segunda versión
// In the define section, increase the color cycle time by 0.5 seconds #define COLOR_CHANGE_INTERVAL 500 // Define the character part to add characters to display red, green and blue in three colors int letters[8][64] = { {30, 38, 21, 45, 20, 44, 19, 43, 18, 42, 17, 41, 24, 32}, // "O" {22, 30, 38, 46, 21, 45, 20, 44, 19, 27, 35, 43, 18, 17, 16}, // "P" {22, 30, 38, 46, 21, 20, 19, 27, 35, 43, 18, 17, 16, 24, 32, 40}, // "E" {22, 46, 21, 45, 20, 28, 44, 19, 27, 35, 43, 18, 34, 42, 17, 41, 16, 40}, // "N" {22, 30, 38, 46, 21, 20, 19, 27, 35, 43, 18, 17, 16, 24, 32, 40}, // "E" {22, 21, 20, 19, 18, 17, 16, 24, 32, 40}, // "L" {30, 38, 21, 45, 20, 44, 19, 27, 35, 43, 18, 42, 17, 41, 16, 40}, // "A" {22, 30, 38, 21, 45, 20, 36, 19, 27, 18, 34, 17, 41, 16, 24, 32} // "B" }; unsigned long lastColorChangeTime = 0; int currentColorIndex = 0; uint32_t colors[3] = {pixels.Color(255, 0, 0), pixels.Color(0, 255, 0), pixels.Color(0, 0, 255)}; // Add switching colors in the loop void loop() { unsigned long currentTime = millis(); if (currentTime - lastColorChangeTime >= COLOR_CHANGE_INTERVAL) { lastColorChangeTime = currentTime; displayText(); currentColorIndex = (currentColorIndex + 1) % 3; } } // Make sure the first lamp bead (pixel 0) of all matrices is off for (int charIndex = 0; charIndex < 8; charIndex++) { int firstPixelIndex = charIndex * 64; if (firstPixelIndex < NUMPIXELS) { pixels.setPixelColor(firstPixelIndex, pixels.Color(0, 0, 0));
Segundo espectáculo
Hermoso
Otra versión
// Define the color corresponding to each character uint32_t characterColors[8] = { pixels.Color(255, 0, 0), // "O" - Red pixels.Color(0, 255, 0), // "P" - Green pixels.Color(0, 0, 255), // "E" - Blue pixels.Color(255, 255, 0), // "N" - Yellow pixels.Color(0, 255, 255), // "E" - Light blue pixels.Color(255, 0, 255), // "L" - Magenta pixels.Color(255, 128, 0), // "A" - Orange pixels.Color(128, 0, 128) // "B" - Purple };
Resumen
Unit Puzzle es una divertida matriz LED de neopíxeles. Me hace feliz todo el día.
¿Tienes otras formas divertidas de jugar? Compartámoslo juntos.