boutons.ino
Los tres botones cableados de la carcasa (GPIO39/38/12) se vuelven un menú: wasPressed para el evento, isHeld para la pulsación larga. M5.update() es el reflejo que no hay que olvidar al inicio de loop.
Hardware necesario
Un M5Stack Core Basic/Gray (ESP32 en carcasa con TFT de 320×240, botones A/B/C, altavoz, ranura microSD, batería de 110 mAh). Ninguno.
Cableado
Sin cableado. El botón C (GPIO12) está en el strap GPIO12 del módulo: mantenerlo al arrancar cambia el modo de programación.
Funcionamiento
La librería antirrebota y memoriza flancos; wasPressed devuelve true una vez por pulsación. Power.sleep pone la carcasa en reposo, despertable con el botón C. En el Arduino IDE (paquete esp32), placa « M5Stack-Core-ESP32 »; instale la biblioteca « M5Stack » (o M5Unified) desde el gestor y suba.
Para ir más lejos
Añada doble clic (wasDoubleClicked en versiones recientes) o haga desplazar un gráfico con A/B.
boutons.ino
// Boutons A (39), B (38), C (12) — bibliotheque M5Stack.
#include <M5Stack.h>
int choix = 0;
const char *MENU[] = {"LED", "SON", "RESEAU", "BATTERIE"};
void setup() {
M5.begin();
M5.Lcd.setTextSize(2);
}
void loop() {
M5.update(); // rafraichit l'etat des boutons
if (M5.BtnA.wasPressed()) choix = (choix + 3) % 4; // precedent
if (M5.BtnB.wasPressed()) choix = (choix + 1) % 4; // suivant
if (M5.BtnC.wasPressed()) { // selectionne
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.setCursor(10, 100);
M5.Lcd.printf(">> %s <<", MENU[choix]);
M5.Speaker.tone(880, 80);
}
if (M5.BtnA.isHeld() || M5.BtnB.isHeld() || M5.BtnC.isHeld()) {
M5.Power.sleep(); // maintenu = veille (retour C)
}
delay(20);
}