Skip to content

+49 1626571232

info@openelab.io

🚀 Free Shipping from 50€ in EU / 80€ Worldwide

How to Use M5Stack Unit Puzzle?

20 Nov 2024 0 Comments

What is Unit Puzzle?

Recently, M5Stack launched a new product called Unit Puzzle. Unit Puzzle is a multi-color light control unit consisting of an 8x8 RGB array made up of 64 WS2812E RGB LEDs.

M5Stack ATOM Echo

M5Stack ATOM Echo

View Product
 

I first saw it at a MakerFaire show like this:

That makes me happy, you know that we like LED very much, so I got 10 unit puzzle immediately. Let's have some fun.

  

Hardware Hookup

About the microcontroller, you guys know what's my favorite. That's right, M5Stack ATOM Lite.

M5Stack ATOM Lite

M5Stack ATOM Lite

View Product
 

And the unit included a unit puzzle, a connector, a Grove cable. That means we can put all the units together.

Let's put them together.
Back

 

Code Part

First Version

//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();

✔ Copied!
 
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
This part is funny. I used Excel to help me do this. When the unit puzzle is connected, its lamp beads are numbered like this:
 

First Show

Very perfect display, but every pixel 0 lit up. Too weird, it should be used for positioning. Never mind, let's turn it off.

 

Second Version

I need to turn off pixel 0, give the letters different colors.
// 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));

✔ Copied!
  
 

Second Show

Beautiful

 

Other Version

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

✔ Copied!
 
 

Summary

Unit Puzzle is a funny neopixel LED matrix. It makes me happy all day long.

Do you have any other fun ways to play? Let’s share it together.

Prev Post
Next Post

Leave a comment

All blog comments are checked prior to publishing

Someone recently bought a

Thanks for subscribing!

This email has been registered!

Shop the look

Choose Options

Recently Viewed

Edit Option
Back In Stock Notification
this is just a warning
Login
Shopping Cart
0 items
-->
RuffRuff App RuffRuff App by Tsun