Wie verwende ich das M5Stack-Einheitenpuzzle?
Was ist Unit Puzzle?
Vor kurzem hat M5Stack ein neues Produkt namens Unit Puzzle auf den Markt gebracht. Unit Puzzle ist eine mehrfarbige Lichtsteuereinheit, die aus einem 8x8 RGB-Array bestehend aus 64 WS2812E RGB-LEDs besteht.
Ich habe es zum ersten Mal auf einer MakerFaire-Show wie dieser gesehen:

Das macht mich glücklich, Sie wissen, dass wir LED sehr mögen, also habe ich sofort ein 10-Einheiten-Puzzle bekommen. Lass uns etwas Spaß haben.
Hardware-Anschluss
Was den Mikrocontroller angeht, ihr wisst, was mir am besten gefällt. Genau, M5Stack ATOM Lite.
Und zur Einheit gehörten ein Einheitspuzzle, ein Stecker und ein Grove-Kabel. Das heißt, wir können alle Einheiten zusammenfügen.



Codeteil
Erste 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)); // Setzt das Pixel an der angegebenen Position auf Rot } } } pixels.show();
Adafruit_NeoPixel Pixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

Erste Show
Sehr perfektes Display, aber jedes Pixel 0 leuchtete. Zu seltsam, es sollte zur Positionierung verwendet werden. Macht nichts, schalten wir es aus.

Zweite Version
// 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));
Zweite Show
Schön

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

Zusammenfassung
Unit Puzzle ist eine lustige Neopixel-LED-Matrix. Es macht mich den ganzen Tag glücklich.
Habt ihr noch andere unterhaltsame Spielmöglichkeiten? Lasst es uns gemeinsam teilen.
Hinterlassen Sie einen Kommentar
Alle Blog-Kommentare werden vor der Veröffentlichung geprüft