boutons.ino
Les trois boutons câblés du boîtier (GPIO39/38/12) deviennent un menu : wasPressed pour l'événement, isHeld pour la fonction longue. M5.update() est le réflexe à ne pas oublier en tête de loop.
Matériel requis
Un M5Stack Core Basic/Gray (ESP32 dans un boîtier avec écran TFT 320×240, 3 boutons A/B/C, haut-parleur, micro SD, batterie 110 mAh). Aucun.
Branchement
Aucun câblage. Bouton C (GPIO12) est relié au strap GPIO12 du module : un appui maintenu au démarrage change le mode de flash.
Fonctionnement
La bibliothèque débounce et mémorise les fronts ; wasPressed ne renvoie vrai qu'une fois par appui. Power.sleep met le boîtier en veille, réveillable par bouton C. Dans l'Arduino IDE (paquet esp32), carte « M5Stack-Core-ESP32 » ; installez la bibliothèque « M5Stack » (ou M5Unified) via le gestionnaire, puis Téléverser.
Pour aller plus loin
Ajoutez un double-clic (wasDoubleClicked sur les versions récentes), ou faites défiler un graphique avec 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);
}