🛠 Lire un bouton sur une broche GPIO libre
Objetivos
Cablear un botón pulsador en un pin realmente libre (GP0-GP22), leerlo con una resistencia pull-up interna, detectar las pulsaciones con un antirrebote por software y memorizar qué pines están prohibidos en la Pico 2 W: GP23-GP25 y GP29 llevan la alimentación, el CS, la IRQ y el reloj SPI del CYW43.
Material
- Pico 2 W
- Botón pulsador
- Protoboard y cables de conexión
- Consola serie (115200 baudios) o dos LED de prueba
Código completo
// main.c - bouton sur GP15, pull-up interne, appui = niveau bas
#include "pico/stdlib.h"
#define BOUTON 15
int main(void) {
stdio_init_all;
gpio_init(BOUTON);
gpio_set_dir(BOUTON, GPIO_IN);
gpio_pull_up(BOUTON); // pas de resistance externe necessaire
uint32_t dernier = 0;
bool etat_prec = true;
while (true) {
bool relache = gpio_get(BOUTON);
uint32_t maintenant = to_ms_since_boot(get_absolute_time);
if (relache != etat_prec && maintenant - dernier >= 20) {
dernier = maintenant;
etat_prec = relache;
if (!relache) {
printf("Appui !\n"); // anti-rebond logiciel 20 ms
}
}
sleep_ms(1);
}
}
Verificación esperada
Cada pulsación imprime exactamente una línea "Appui !" en la serie, sin duplicados. Al iniciar, sin pulsación, el pin permanece en estado alto gracias a la resistencia pull-up interna; soltar el dedo no provoca ningún mensaje parásito.
Errores frecuentes
- Cablear en GP23-GP25 o GP29: estos pines están consumidos por la radio (power-on, SPI CS, IRQ, SPI CLK compartida con el monitor VSYS) y no son entradas libres.
- Olvidar gpio_pull_up: el pin queda flotante, los estados son aleatorios.
- Sin antirrebote, una sola pulsación genera varias detecciones de pulsación.
- Errata RP2350-E9 en las primeras tarjetas: las entradas de alta impedancia pueden quedar bloqueadas cerca de 2,2 V; una resistencia pull-down externa de máximo 8,2 kOhm corrige el problema.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython