Jak používat M5Stack Unit Puzzle?

 

Co je Unit Puzzle?

Nedávno společnost M5Stack představila nový produkt nazvaný Unit Puzzle. Unit Puzzle je jednotka pro ovládání vícebarevného světla, která se skládá z 8x8 RGB pole tvořeného 64 WS2812E RGB LED diodami.

M5Stack ATOM Echo

M5Stack ATOM Echo

Zobrazit produkt
 

Poprvé jsem to viděl na takovéto výstavě MakerFaire:

To mě těší, víš, že máme LED moc rádi, takže jsem hned pořídil 10 kusů puzzle. Pojďme se pobavit.

  

Zapojení hardwaru

O mikrokontroléru, víte, který je můj oblíbený. Přesně tak, M5Stack ATOM Lite.

M5Stack ATOM Lite

M5Stack ATOM Lite

Zobrazit produkt
 

A jednotka obsahovala jednotkovou hádanku, konektor, Grove kabel. To znamená, že můžeme všechny jednotky spojit dohromady.

Dejme je dohromady.
Zadní

 

Část kódu

První verze

//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)); // Nastaví pixel na určené pozici na červenou
      }
    }
  }

  pixely.zobrazit();

✔ Zkopírováno!


 
Adafruit_NeoPixel pixely(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
Tato část je legrační. Použil jsem Excel, abych si s tím pomohl. Když je jednotková skládačka spojena, její lampové korálky jsou očíslovány takto:

 

První představení

Velmi dokonalý displej, ale každý pixel je zhasnutý. Příliš divné, měl by být použit pro polohování. Nevadí, vypneme ho.

 

Druhá verze

Potřebuji vypnout pixel 0, dát písmenům různé barvy.
// 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));

✔ Zkopírováno!
  
 

Druhá show

Krásný

 

Jiná verze

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

✔ Zkopírováno!
 
 

Shrnutí

Unit Puzzle je zábavná neopixel LED matice. Dělá mě šťastným celý den.

Máte nějaké další zábavné způsoby hraní? Podělme se o ně společně.




 

Zanechte komentář

Vaše e-mailová adresa nebude zveřejněna. Povinná pole jsou označena *

Přihlaste se k odběru našeho newsletteru

Získejte nejnovější informace o našich produktech a speciálních nabídkách.