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.
Lassen Sie uns sie 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.