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

    M5stack led output not working.

    Scheduled Pinned Locked Moved M5EZ
    2 Posts 2 Posters 7.6k Views
    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.
    • L Offline
      lasslop
      last edited by

      Hello guys,
      i am trying to create a menu using Arduion and M5stack, i wanted to test the buttons if they work, so i conected a led pin to 21 and G output, when i press start the led should go on and if i press stop the led should turn off, but it is not working how i want, the led is always on no matter what i press, but if i switch the pin output the led starts to blink when i press start or stop ,
      what i am trying to create is switching the led on or off when i press start or stop
      here is my code:

      bool LED_ON = false;
      int clockwise = 0;
      int counterclockwise = 0;
      int rest = 0;

      const int ledPin = 21;

      // Standard Arduino setup function. ez.begin() takes care of startup and initialization
      void setup() {
      #include <themes/default.h> // per https://github.com/M5ez/M5ez#themes
      #include <themes/dark.h> // makes both themes available
      pinMode(ledPin, OUTPUT);
      ez.begin(); // initializes everything
      }

      void loop() {

      ez.addEvent(LEDMotor);

      Serial.println("entering loop()"); // Shows what function we're in on the Serial Monitor
      ezMenu topmenu("Top Menu"); // creates the menu but does nothing else
      topmenu.txtSmall(); // makes menu text smaller, neater
      topmenu.buttons("up # select # down"); // 'select' sets pickName and pickCaption, all set pickButton
      //topmenu.addItem("dark | Dark Theme", dark); // ignore in while loop, calls dark() automatically
      //topmenu.addItem("light | Light Theme", light); // ignore in while loop, calls light() automatically
      topmenu.addItem("P1"); // does nothing; handled manually in while loop
      topmenu.addItem("P2"); // does nothing; handled manually in while loop
      topmenu.addItem("P3"); // does nothing; handled manually in while loop
      //topmenu.addItem("Black"); // does nothing; handled manually in while loop
      topmenu.addItem("Menu"); // does nothing; handled manually in while loop
      while(topmenu.runOnce()) { // runOnce displays the menu and returns when a button is pressed
      // you can watch the results in the Serial Monitor
      Serial.printf("topmenu.pick = %d\n", topmenu.pick());
      Serial.printf("topmenu.pickButton = %s\n", topmenu.pickButton().c_str());
      Serial.printf("topmenu.pickName = %s\n", topmenu.pickName().c_str());
      Serial.printf("topmenu.pickCaption = %s\n\n", topmenu.pickCaption().c_str());

      String result  = topmenu.pickName();              // find out what menu was selected when 'select' button was pressed
      if(     result == "P1")   newSubMenu(5,10,5,result);
      else if(result == "P2")   newSubMenu(5,17,3,result);    
      else if(result == "P3")   newSubMenu(10,10,0,result);    
      

      }
      }

      /****/
      void newSubMenu(int clockwise, int counterclockwise, int pause, String menuname)
      {
      Serial.println(menuname); // Shows what function we're in on the Serial Monitor
      ezMenu submenu(menuname); // creates the menu but does nothing else
      submenu.txtSmall(); // makes menu text smaller, neater
      submenu.buttons("up # back # select ## down #"); // standard buttons for a submenu; long press on button A pops up one level
      submenu.addItem("Start"); // not handled at all, so nothing happens when this menu is selected except a redraw
      submenu.addItem("Stop"); // not handled at all, so nothing happens when this menu is selected except a redraw

      while(submenu.runOnce()) { // runOnce displays the menu and returns when a button is pressed
      // you can watch the results in the Serial Monitor
      Serial.printf("submenu.pick = %d\n", submenu.pick());
      Serial.printf("submenu.pickButton = %s\n", submenu.pickButton().c_str());
      Serial.printf("submenu.pickName = %s\n", submenu.pickName().c_str());
      Serial.printf("submenu.pickCaption = %s\n\n", submenu.pickCaption().c_str());

      if(submenu.pickName() == "Start") Motor(clockwise, counterclockwise, true); 
      if(submenu.pickName() == "Stop") Motor(clockwise, counterclockwise, false); 
      

      }
      }

      /* */
      void Motor(int clockwise, int counterclockwise, bool spinmotor)
      {
      LED_ON = spinmotor;
      }

      uint16_t LEDMotor()
      {
      if(LED_ON){
      digitalWrite(ledPin, HIGH);
      Serial.println("LED on");
      }
      else{
      digitalWrite(ledPin, LOW);
      Serial.printlb("LED off");
      }

      return 1000;
      

      }

      /********************************************************************************************************/

      /****/
      void subMenu() { Serial.println("Menu"); // Shows what function we're in on the Serial Monitor
      ezMenu submenu("Menu"); // creates the menu but does nothing else
      submenu.txtSmall(); // makes menu text smaller, neater
      submenu.buttons("up # back # select ## down #"); // standard buttons for a submenu; long press on button A pops up one level
      submenu.addItem("foo"); // not handled at all, so nothing happens when this menu is selected except a redraw
      submenu.addItem("bar"); // not handled at all, so nothing happens when this menu is selected except a redraw
      submenu.addItem("baz"); // not handled at all, so nothing happens when this menu is selected except a redraw
      submenu.addItem("sub | subSubMenu"); // returns the name "sub" but displays the caption "subSubMenu"
      while(submenu.runOnce()) { // runOnce displays the menu and returns when a button is pressed
      // you can watch the results in the Serial Monitor
      Serial.printf("submenu.pick = %d\n", submenu.pick());
      Serial.printf("submenu.pickButton = %s\n", submenu.pickButton().c_str());
      Serial.printf("submenu.pickName = %s\n", submenu.pickName().c_str());
      Serial.printf("submenu.pickCaption = %s\n\n", submenu.pickCaption().c_str());

      if(submenu.pickName() == "sub") subSubMenu();     // submenu.pickName() == "sub", or submenu.pickCaption() == "subSubMenu", or submenu.pick == 4
      

      }
      }

      void subSubMenu() {}

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

        Hello @lasslop

        GPIO21 (pin 21) is not a lucky choice. By default GPIO21 is used as SDA (I2C). Have you tried with a different GPIO?

        Thanks
        Felix

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

        1 Reply Last reply Reply Quote 0

        Hello! It looks like you're interested in this conversation, but you don't have an account yet.

        Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

        With your input, this post could be even better 💗

        Register Login
        • First post
          Last post