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