bouton-led.ino

ESP32-C6 · Archivo : bouton-led.ino · Lenguaje : Arduino · Uso : Compter les appuis sur un bouton avec anti-rebond

Un botón entre GPIO4 y GND, elevado internamente: cada pulsación limpia se cuenta e imprime. El filtro antirrebote de 40 ms elimina el rebote mecánico que duplicaría la cuenta.

Hardware necesario

Una placa ESP32-C6 (RISC-V a 160 MHz, Wi-Fi 6 + BLE 5 + 802.15.4) tipo DevKitC-1, alimentada por USB. 1 botón pulsador (una pata a GPIO4, la otra a GND).

Cableado

Botón en GPIO4 a GND; la resistencia INPUT_PULLUP es interna. Evite GPIO6-11 (flash) y GPIO34-39 (solo entrada, sin pull-up).

Funcionamiento

Se guarda el último nivel leído y la hora del último cambio; un flanco solo vale si el nivel se mantiene estable 40 ms. INPUT_PULLUP invierte la lógica: pulsado = LOW. En el Arduino IDE (paquete esp32 reciente), elija « ESP32C6 Dev Module » y suba; para Zigbee/Thread use ESP-IDF (idf.py set-target esp32c6).

Para ir más lejos

Doble clic (medir el intervalo entre pulsaciones), o despertar profundo en ese mismo GPIO con esp_sleep_enable_ext0_wakeup.

bouton-led.ino

// Bouton sur GPIO4 (vers GND, résistance interne) + compteur anti-rebond.
const int BOUTON = 4;
const int LED = 7;
const unsigned long ANTI_REBOND = 40;  // ms

bool dernier = HIGH, stable = HIGH;
unsigned long bord = 0;
int compteur = 0;

void setup() {
  pinMode(BOUTON, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
  Serial.begin(115200);
}

void loop() {
  bool lu = digitalRead(BOUTON);
  unsigned long t = millis();
  if (lu != dernier) bord = t;
  if (t - bord >= ANTI_REBOND && lu != stable) {
    stable = lu;
    if (stable == LOW) {                 // front d'appui (logique inversée)
      compteur++;
      digitalWrite(LED, HIGH);
      Serial.printf("Appui n°%d\n", compteur);
    } else {
      digitalWrite(LED, LOW);
    }
  }
  dernier = lu;
}

← Volver a la ficha