🛠 Lire un bouton sur une broche GPIO libre
Objectifs
Cabler un bouton poussoir sur une broche reellement libre (GP0-GP22), le lire avec une pull-up interne, detecter les appuis avec un anti-rebond logiciel, et memoriser quelles broches sont interdites sur la Pico 2 W : GP23-GP25 et GP29 portent l'alimentation, le CS, l'IRQ et l'horloge SPI du CYW43.
Matériel
- Pico 2 W
- Bouton poussoir
- Breadboard et cables de connexion
- Console série (115200 bauds) ou deux LED de test
Code complet
// 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 résistance externe nécessaire
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);
}
}
Vérification attendue
Chaque appui imprime exactement une ligne Appui ! sur la série, sans doublons. Au démarrage, sans appui, la broche reste à l'état haut grâce à la pull-up interne ; lever le doigt ne déclenche aucun message parasite.
Erreurs fréquentes
- Cabler sur GP23-GP25 ou GP29 : ces broches sont consommees par la radio (power-on, SPI CS, IRQ, SPI CLK partagée avec le moniteur VSYS) et ne sont pas des entrées libres.
- Oublier gpio_pull_up : la broche flotte, les états sont aléatoires.
- Sans anti-rebond, un appui unique genere plusieurs appuis detectes.
- Erata RP2350-E9 sur les premières cartes : les entrées haute impedance peuvent rester bloquées près de 2,2 V ; une pull-down externe de 8,2 kOhm maximum corrige le problème.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython