🛠 Lire un bouton poussoir sur GPIO
Objetivos
Dominar las entradas GPIO del RP2350: configuración como entrada, resistencia de pull-up interna, antirrebote por software y reacción de una salida (LED GP25) a una acción humana. También descubrirás la errata RP2350-E9 que afecta a las resistencias de pull-down del Bank 0 en las tarjetas A2 anteriores a mediados de 2025.
Material
- 1 × Raspberry Pi Pico 2
- 1 × botón pulsador
- Cables jumper; Pico SDK ≥ 2.0.0
- Pin utilizado: GP22 (solo digital — pinout confirmado por la hoja de datos)
Código completo
/* bouton.c — appui sur GP22 -> LED GP25 s'allume */
#include "pico/stdlib.h"
#define BTN_PIN 22
#define LED_PIN 25
int main(void) {
gpio_init(BTN_PIN);
gpio_set_dir(BTN_PIN, GPIO_IN);
gpio_pull_up(BTN_PIN); /* pull-up interne : repos = 1 */
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
uint pressed = 0;
while (true) {
uint now = !gpio_get(BTN_PIN); /* actif à l'état bas */
if (now != pressed) { /* anti-rebond simple */
sleep_ms(20);
pressed = !gpio_get(BTN_PIN);
gpio_put(LED_PIN, pressed);
}
sleep_ms(5);
}
}
El botón conecta GP22 a GND; no se necesita resistencia externa gracias a la resistencia de pull-up interna.
Verificación esperada
LED apagada en reposo, encendida mientras se pulsa el botón, sin parásitos de parpadeo durante la pulsación. Con un terminal serie (UART0 GP0/GP1) puedes añadir un printf para contar las pulsaciones estables.
Errores frecuentes
- Olvidar
gpio_pull_up: la entrada queda flotante y el LED cambia de estado aleatoriamente. - Conectar el botón entre GP22 y 3V3 sin resistencia externa: cortocircuito en reposo si también activas una resistencia de pull-down.
- Errata RP2350-E9 (stepping A2, tarjetas compradas antes de mediados de 2025): las resistencias de pull-down internas del Bank 0 pueden tener fugas (~120 µA); si un pull-down fiable es crítico, añade una resistencia externa ≤ 8,2 kΩ. Corregido en A3/A4 (anunciados el 29 de julio de 2025).
- No implementar antirrebote: una sola pulsación se cuenta diez veces en un contador.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython