Wat is Unit Puzzle?
Onlangs lanceerde M5Stack een nieuw product genaamd Unit Puzzle. Unit Puzzle is een meerkleurige lichtregeleenheid bestaande uit een 8x8 RGB-array bestaande uit 64 WS2812E RGB-LED's.
Ik zag het voor het eerst op een MakerFaire-show zoals deze:

Daar word ik blij van, je weet dat we LED erg leuk vinden, dus ik kreeg meteen een puzzel van 10 eenheden. Laten we wat plezier maken.
Hardware-aansluiting
Wat betreft de microcontroller, jullie weten wat mijn favoriet is. Dat klopt, M5Stack ATOM Lite.
En de eenheid bevatte een eenheidspuzzel, een connector en een Grove-kabel. Dat betekent dat we alle eenheden bij elkaar kunnen voegen.


Code-onderdeel
Eerste versie
//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)); // Stelt de pixel op de opgegeven positie in op rood
}
}
}
pixels.show();
Adafruit_NeoPixel-pixels (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
Eerste show
Zeer perfecte weergave, maar elke pixel 0 lichtte op. Te raar, het zou gebruikt moeten worden voor positionering. Maakt niet uit, laten we het uitschakelen.

Tweede versie
// 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));
Tweede show
Mooi

Andere versie
// 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
};

Samenvatting
Unit Puzzle is een grappige neopixel LED-matrix. Het maakt mij de hele dag blij.
Heb jij nog andere leuke manieren om te spelen? Laten we het samen delen.
