Czym jest Unit Puzzle?
Niedawno M5Stack wprowadził na rynek nowy produkt o nazwie Unit Puzzle. Unit Puzzle to jednostka sterująca wielokolorowym światłem, składająca się z matrycy 8x8 RGB złożonej z 64 diod LED WS2812E RGB.
Po raz pierwszy zobaczyłem to na pokazie MakerFaire takim jak ten:

To mnie cieszy, wiesz, że bardzo lubimy LED, więc od razu kupiłem 10 sztuk puzzli. Zabawmy się trochę.
Podłączenie sprzętu
Jeśli chodzi o mikrokontroler, wiecie, który jest mój ulubiony. Dokładnie, M5Stack ATOM Lite.
A jednostka zawierała układankę jednostek, łącznik, kabel Grove. To oznacza, że możemy połączyć wszystkie jednostki razem.



Część kodu
Pierwsza wersja
//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]; pixels.setPixelColor(pixelIndex, pixels.Color(255, 0, 0)); // Sets the pixel at the specified position to red } } } pixels.show();
Adafruit_NeoPixel piksele(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

Pierwszy pokaz
Bardzo doskonały wyświetlacz, ale każdy piksel 0 jest podświetlony. Zbyt dziwne, powinien być używany do pozycjonowania. Nieważne, wyłączmy go.

Druga wersja
// 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));
Drugi pokaz
Piękny

Inna wersja
// 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 };

Podsumowanie
Unit Puzzle to zabawna matryca LED neopixel. Sprawia, że jestem szczęśliwy przez cały dzień.
Czy masz inne zabawne sposoby na zabawę? Podzielmy się nimi razem.