mpaper_gpio_button_interrupt.ino

M5Stack M5Paper · Archivo : mpaper_gpio_button_interrupt.ino · Lenguaje : C++ · Uso : Détecter l'appui sur un bouton physique via une interruption GPIO pour réveiller le système.

Uso de interrupciones GPIO para detectar pulsaciones en los tres botones físicos del M5Paper.

Hardware: M5Paper con sus 3 botones capacitivos (BTN0, BTN1, BTN2). Software: Biblioteca M5Paper.h. Ejecución: Carga el código, abre el Monitor Serie. Pulsa los botones para ver mensajes. Cuidado con el rebote de hardware en las interrupciones.

mpaper_gpio_button_interrupt.ino

#include <M5Paper.h>

// Le M5Paper a 3 boutons physiques : BTN0 (GAUCHE), BTN1 (MILIEU), BTN2 (DROIT)
// Ils sont actifs à l'état BAS (Pull-up interne activé par défaut dans M5.begin)

void IRAM_ATTR onButtonPress() {
  // Code exécuté dans l'interruption (gardez-le court)
  // Ici, on pourrait simplement mettre un flag ou réveiller le processeur
}

void setup() {
  M5.begin();
  Serial.begin(115200);
  
  // Configuration des broches pour les boutons
  pinMode(BTN0_PIN, INPUT_PULLUP);
  pinMode(BTN1_PIN, INPUT_PULLUP);
  pinMode(BTN2_PIN, INPUT_PULLUP);

  // Attacher les interruptions sur le front descendant (appui)
  attachInterrupt(digitalPinToInterrupt(BTN0_PIN), onButtonPress, FALLING);
  attachInterrupt(digitalPinToInterrupt(BTN1_PIN), onButtonPress, FALLING);
  attachInterrupt(digitalPinToInterrupt(BTN2_PIN), onButtonPress, FALLING);
  
  Serial.println("M5Paper GPIO Interrupt Example Ready");
}

void loop() {
  // Vérification manuelle en complément (polling) pour debug
  if (digitalRead(BTN0_PIN) == LOW) {
    Serial.println("Button 0 Pressed (Polling)");
    delay(200); // Anti-rebond simple
  }
  if (digitalRead(BTN1_PIN) == LOW) {
    Serial.println("Button 1 Pressed (Polling)");
    delay(200);
  }
  if (digitalRead(BTN2_PIN) == LOW) {
    Serial.println("Button 2 Pressed (Polling)");
    delay(200);
  }
  delay(50);
}

← Volver a la ficha