M5stack led output not working.
-
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 redrawwhile(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() {}
-
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
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