🛠 Lire un bouton poussoir avec anti-rebond
Objetivos
Aprender la lectura de entrada digital en ESP32-S2: activar una resistencia de pull-up interna, leer el estado de un botón y filtrar los rebotes mecánicos mediante un temporizador de software.
Material
- Placa ESP32-S2
- 1 botón pulsador
- 1 LED con resistencia de 330 Ω (opcional, para el indicador)
- Cables Dupont
Código completo
// Bouton avec anti-rebond logiciel sur ESP32-S2
const uint8_t BTN_PIN = 4;
const uint8_t LED_PIN = 2;
const unsigned long DEBOUNCE_MS = 50;
bool etatLed = false;
bool dernierEtatBtn = HIGH;
unsigned long dernierBordMs = 0;
void setup {
pinMode(BTN_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
Serial.begin(115200);
}
void loop {
bool etatBtn = digitalRead(BTN_PIN);
unsigned long maintenant = millis;
if (etatBtn != dernierEtatBtn &&
maintenant - dernierBordMs >= DEBOUNCE_MS) {
dernierBordMs = maintenant;
dernierEtatBtn = etatBtn;
if (etatBtn == LOW) { // bouton enfoncé (logique inversée)
etatLed = !etatLed;
digitalWrite(LED_PIN, etatLed ? HIGH : LOW);
Serial.println(etatLed ? "LED ON" : "LED OFF");
}
}
}
Verificación esperada
Cada pulsación del botón cambia el estado del LED y muestra «LED ON» o «LED OFF» en el monitor serie a 115200 baudios. Una pulsación firme produce solo un cambio de estado.
Errores frecuentes
- Olvidar
INPUT_PULLUP: la entrada queda flotante y el estado cambia sin pulsar el botón. - Lógica invertida mal comprendida: con una resistencia de pull-up, el GPIO lee LOW cuando el botón está pulsado.
- Anti-rebote demasiado corto: algunas pulsaciones se cuentan doble; aumente
DEBOUNCE_MS. - Botón conectado a un pin ocupado por la flash o la PSRAM: consulte el esquema de la placa antes de elegir el pin.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino