🛠 Réagir aux boutons A et B
Objetivos
Leer los tres botones de la M5StickC Plus2: A = G37 (frontal), B = G39 (lateral), C = G35 (también botón de encendido/fuente de despertar). Contar las pulsaciones, reiniciar con B y comprender por qué C es un botón que debe manipularse con precaución.
Material
- 1× M5StickC Plus2 (v2)
- Cable USB-C + controlador CH9102
- Arduino IDE (paquete esp32) o PlatformIO, biblioteca M5Unified
Código completo
// Boutons A/B/C — broches INPUT ONLY G37/G39/G35 (jamais en sortie !)
#include <M5Unified.h>
uint32_t compteur = 0;
void setup {
auto cfg = M5.config;
M5.begin(cfg);
M5.Display.setRotation(1);
M5.Display.fillScreen(TFT_BLACK);
// M5Unified configure les broches en entrée avec pull-up interne
// (en écriture directe : pinMode(37, INPUT_PULLUP), etc.)
}
void loop {
M5.update;
if (M5.BtnA.wasPressed) { // bouton A = G37
compteur++;
M5.Speaker.tone(2093, 80); // bip court : buzzer passif sur G2 (PWM)
}
if (M5.BtnB.wasPressed) { // bouton B = G39
compteur = 0;
M5.Speaker.tone(440, 80);
}
if (M5.BtnC.wasPressed) { // C = G35 = aussi la touche power !
M5.Display.fillScreen(TFT_BLACK); // appui long > 6 s = extinction (sans USB)
}
M5.Display.setCursor(20, 50);
M5.Display.setTextSize(4);
M5.Display.setTextColor(TFT_YELLOW, TFT_BLACK);
M5.Display.printf("%-6lu", (unsigned long)compteur);
vTaskDelay(10 / portTICK_PERIOD_MS);
}
Verificación esperada
Cada pulsación en A incrementa el contador grande amarillo y hace «bip» al zumbador pasivo (G2, salida de tono PWM únicamente). B pone el contador a cero. Una pulsación corta en C borra la pantalla; mantenerlo más de 6 segundos sin USB apaga completamente el dispositivo.
Errores frecuentes
- Tratar G37/G39/G35 como salidas: son pines de solo entrada, no puede salir corriente de ellos.
- Confundir pulsación corta y pulsación larga en C: más allá de 6 s sin USB, la máquina se apaga (con USB, solo se apaga la pantalla — la alimentación permanece activa, de ahí los «no se apaga / la batería se descarga con el cargador»).
- Olvidar
M5.update: loswasPressednunca se activan. - Leer los botones con
digitalReadsinINPUT_PULLUP: estado flotante y pulsaciones fantasma. - Los botones son muy pequeños (problema de ergonomía conocido): prever tiempos de rebote, M5Unified ya los filtra.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
hello-stick.inoArduinoboutons.inoArduinobuzzer.inoArduinoinclinometre.inoArduinohorloge.inoArduinoir-tv.inoArduino