🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    Core2 and M5Unified display no longer works

    Core 2
    3
    3
    352
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      HappyUser
      last edited by

      Wow,
      I have uploaded the standard M5Unified Button code to my M5Core2.
      I know the program is running because my serial.print shows button counts.
      But the display shows nothing.
      I have tried this on multiple Core2 of which I know the display is not defect. All boards and libs are updated (as fwr as i know).
      What am i doing wrong here?
      Thanks

      #include <M5Unified.h>
      
      void setup(void)
      {
        M5.begin();
      
        Serial.begin(115200);
      
        /// For models with EPD : refresh control
        M5.Display.setEpdMode(epd_mode_t::epd_fastest); // fastest but very-low quality.
      
        if (M5.Display.width() < M5.Display.height())
        { /// Landscape mode.
          M5.Display.setRotation(M5.Display.getRotation() ^ 1);
        }
      }
      
      void loop(void)
      {
        M5.delay(1);
      
        M5.update();
      //------------------- Button test
      /*
      /// List of available buttons:
        M5Stack BASIC/GRAY/GO/FIRE:  BtnA,BtnB,BtnC
        M5Stack Core2:               BtnA,BtnB,BtnC,BtnPWR
        M5Stick C/CPlus:             BtnA,BtnB,     BtnPWR
        M5Stick CoreInk:             BtnA,BtnB,BtnC,BtnPWR,BtnEXT
        M5Paper:                     BtnA,BtnB,BtnC
        M5Station:                   BtnA,BtnB,BtnC,BtnPWR
        M5Tough:                                    BtnPWR
        M5Atom M5AtomU:              BtnA
        M5Stamp Pico/C3/C3U:         BtnA
      */
      
        static constexpr const int colors[] = { TFT_WHITE, TFT_CYAN, TFT_RED, TFT_YELLOW, TFT_BLUE, TFT_GREEN };
        static constexpr const char* const names[] = { "none", "wasHold", "wasClicked", "wasPressed", "wasReleased", "wasDeciedCount" };
      
        int w = M5.Display.width() / 5;
        int h = M5.Display.height();
        M5.Display.startWrite();
      
        /// BtnPWR: "wasClicked"/"wasHold"  can be use.
        /// BtnPWR of CoreInk: "isPressed"/"wasPressed"/"isReleased"/"wasReleased"/"wasClicked"/"wasHold"/"isHolding"  can be use.
        int state = M5.BtnPWR.wasHold() ? 1
                  : M5.BtnPWR.wasClicked() ? 2
                  : M5.BtnPWR.wasPressed() ? 3
                  : M5.BtnPWR.wasReleased() ? 4
                  : M5.BtnPWR.wasDecideClickCount() ? 5
                  : 0;
      
        if (state)
        {
          M5_LOGI("BtnPWR:%s  count:%d", names[state], M5.BtnPWR.getClickCount());
          M5.Display.fillRect(w*0, 0, w-1, h, colors[state]);
          
        }
      
        /// BtnA,BtnB,BtnC,BtnEXT: "isPressed"/"wasPressed"/"isReleased"/"wasReleased"/"wasClicked"/"wasHold"/"isHolding"  can be use.
        state = M5.BtnA.wasHold() ? 1
              : M5.BtnA.wasClicked() ? 2
              : M5.BtnA.wasPressed() ? 3
              : M5.BtnA.wasReleased() ? 4
              : M5.BtnA.wasDecideClickCount() ? 5
              : 0;
        if (state)
        {
          M5_LOGI("BtnA:%s  count:%d", names[state], M5.BtnA.getClickCount());
          M5.Display.fillRect(w*1, 0, w-1, h, colors[state]);
          Serial.println(M5.BtnA.getClickCount());
        }
      
        state = M5.BtnB.wasHold() ? 1
              : M5.BtnB.wasClicked() ? 2
              : M5.BtnB.wasPressed() ? 3
              : M5.BtnB.wasReleased() ? 4
              : M5.BtnB.wasDecideClickCount() ? 5
              : 0;
        if (state)
        {
          M5_LOGI("BtnB:%s  count:%d", names[state], M5.BtnB.getClickCount());
          M5.Display.fillRect(w*2, 0, w-1, h, colors[state]);
        }
      
        state = M5.BtnC.wasHold() ? 1
              : M5.BtnC.wasClicked() ? 2
              : M5.BtnC.wasPressed() ? 3
              : M5.BtnC.wasReleased() ? 4
              : M5.BtnC.wasDecideClickCount() ? 5
              : 0;
        if (state)
        {
          M5_LOGI("BtnC:%s  count:%d", names[state], M5.BtnC.getClickCount());
          M5.Display.fillRect(w*3, 0, w-1, h, colors[state]);
        }
      
        state = M5.BtnEXT.wasHold() ? 1
              : M5.BtnEXT.wasClicked() ? 2
              : M5.BtnEXT.wasPressed() ? 3
              : M5.BtnEXT.wasReleased() ? 4
              : M5.BtnEXT.wasDecideClickCount() ? 5
              : 0;
        if (state)
        {
          M5_LOGI("BtnEXT:%s  count:%d", names[state], M5.BtnEXT.getClickCount());
          M5.Display.fillRect(w*4, 0, w-1, h, colors[state]);
        }
        M5.Display.endWrite();
      }
      
      #if !defined ( ARDUINO ) && defined ( ESP_PLATFORM )
      extern "C" {
        void loopTask(void*)
        {
          setup();
          for (;;) {
            loop();
          }
          vTaskDelete(NULL);
        }
      
        void app_main()
        {
          xTaskCreatePinnedToCore(loopTask, "loopTask", 8192, NULL, 1, NULL, 1);
        }
      }
      #endif
      
      
      1 Reply Last reply Reply Quote 0
      • henryCharmH
        henryCharm
        last edited by

        The problem is caused by a line in your code that sets the display to "EPD mode," which is only for e-paper (e-ink) displays. The M5Core2 uses an LCD screen, not an e-paper screen.

        This line:

        M5.Display.setEpdMode(epd_mode_t::epd_fastest);

        is not compatible with the M5Core2 screen.

        To fix the issue:

        Remove or comment out that line from your code.

        After doing this, the display should start working normal

        From a Data Science Intern to now happy as a IoT Solutions Architect.

        felmueF 1 Reply Last reply Reply Quote 0
        • felmueF
          felmue @henryCharm
          last edited by

          Hello @HappyUser

          hmm, the button sample code works fine as it is for me. Tested with M5Core2 and M5Core2 v1.1.

          For reference: I was using Arduino library v3.2.1, M5Unfied v0.2.8 and M5GFX v0.2.13.

          @henryCharm : you are correct, the line M5.Display.setEpdMode(epd_mode_t::epd_fastest); is only used / required for ePaper however it is simply ignored on non ePaper displays. So yes, it would be cleaner to remove the line, but I don't think it does any harm. I think the reason it is there is so that the example works on different M5Cores.

          Thanks
          Felix

          GPIO translation table M5Stack / M5Core2
          Information about various M5Stack products.
          Code examples

          1 Reply Last reply Reply Quote 0
          • First post
            Last post