Raspberry Pi Pico - Bouton - Anti-rebond

Lorsque vous programmez le Raspberry Pi Pico pour détecter quand un bouton est pressé, vous pourriez constater qu'une seule pression est lue plusieurs fois. Cela est dû au fait que le bouton peut osciller rapidement entre ON et OFF en raison de sa conception. Ce phénomène, appelé rebondissement, peut donner l'impression que le bouton a été pressé plusieurs fois, ce qui peut entraîner des erreurs dans certains programmes. Ce guide montre comment résoudre ce problème, une méthode appelée anti-rebond du bouton.

Phénomène de chatter du Raspberry Pi Pico

Nous examinerons cinq exemples différents ci-dessous et expliquerons les différences entre eux :

Préparation du matériel

1×Raspberry Pi Pico W
1×Raspberry Pi Pico Alternativement:
1×Câble Micro USB
1×Bouton avec capuchon pour plaque d'essai
1×Kit bouton pour plaque d'essai
1×Bouton poussoir pour montage sur panneau
1×Module bouton poussoir
1×Plaque d'essai
1×Fils de connexion
1×Recommandé: Carte d'extension à bornier à vis pour Raspberry Pi Pico

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (30 capteurs/écrans)
1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du bouton

Découvrez comment fonctionnent les boutons, y compris leur disposition, leur utilisation et comment les programmer, en consultant ces guides.

Diagramme de câblage

Schéma de câblage du bouton Raspberry Pi Pico

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Regardons et comparons le code du Raspberry Pi Pico sans et avec anti-rebond, et voyons comment ils se comportent.

Raspberry Pi Pico - Bouton sans anti-rebond

Examinons d'abord le code sans debounce pour comprendre comment il fonctionne.

/* * Ce code Raspberry Pi Pico a été développé par newbiely.fr * Ce code Raspberry Pi Pico est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/raspberry-pico/raspberry-pi-pico-button-debounce */ from machine import Pin import time BUTTON_PIN = 0 # The Raspberry Pi Pico pin connected to the button (GP0) # Setup the button pin. The Pin.PULL_UP enables the internal pull-up resistor. button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP) # Initialize the previous state of the button prev_button_state = 1 # Assuming the button is unpressed initially while True: # Read the current state of the button button_state = button.value() # Check if button was released if prev_button_state == 0 and button_state == 1: print("The button is released") # Check if button was pressed if prev_button_state == 1 and button_state == 0: print("The button is pressed") # Save the current state as the previous state for the next loop iteration prev_button_state = button_state

Étapes rapides

Veuillez suivre ces instructions étape par étape :

  • Assurez-vous que l'IDE Thonny est installé sur votre ordinateur.
  • Assurez-vous que le firmware MicroPython est installé sur votre Raspberry Pi Pico.
  • Si c'est la première fois que vous utilisez un Raspberry Pi Pico, consultez le tutoriel Raspberry Pi Pico - Premiers pas. pour des instructions détaillées.
  • Connectez le bouton au Raspberry Pi Pico selon le schéma fourni.
  • Connectez le Raspberry Pi Pico à votre ordinateur à l'aide d'un câble USB.
  • Lancez l'IDE Thonny sur votre ordinateur.
  • Dans l'IDE Thonny, sélectionnez l'Interpréteur MicroPython (Raspberry Pi Pico) en naviguant vers Outils Options.
  • Dans l'onglet Interpréteur, sélectionnez MicroPython (Raspberry Pi Pico) dans le menu déroulant.
  • Assurez-vous que le port correct est sélectionné. L'IDE Thonny devrait détecter automatiquement le port, mais vous devrez peut-être le sélectionner manuellement (par exemple, COM3 sous Windows ou /dev/ttyACM0 sous Linux).
  • Copiez le code ci-dessus et collez-le dans l'éditeur de l'IDE Thonny.
  • Enregistrez le script sur votre Raspberry Pi Pico en :
    • Cliquez sur le bouton Enregistrer, ou utilisez les touches Ctrl+S.
    • Dans la boîte de dialogue d'enregistrement, vous verrez deux sections : Cet ordinateur et Raspberry Pi Pico. Sélectionnez Raspberry Pi Pico.
    • Enregistrez le fichier sous main.py.
  • Cliquez sur le bouton Vert Exécuter (ou appuyez sur F5) pour exécuter le script. Le script s'exécutera.
  • Maintenez le bouton enfoncé pendant quelques secondes, puis relâchez-le.
  • Vérifiez le message dans le Shell en bas de Thonny.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot The button is pressed The button is pressed The button is pressed The button is released The button is released
MicroPython (Raspberry Pi Pico) • Board CDC @ COM29 ≡

Vous avez appuyé et relâché le bouton une seule fois, mais le Raspberry Pi Pico pense que cela a été fait plusieurs fois.

Raspberry Pi Pico - Bouton avec anti-rebond

/* * Ce code Raspberry Pi Pico a été développé par newbiely.fr * Ce code Raspberry Pi Pico est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/raspberry-pico/raspberry-pi-pico-button-debounce */ from machine import Pin import utime BUTTON_PIN = 0 # The Raspberry Pi Pico pin connected to the button (GP0) DEBOUNCE_TIME = 100 # debounce time in milliseconds # Setup the button pin. The Pin.PULL_UP enables the internal pull-up resistor. button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP) # Initialize the previous state of the button prev_button_state = 1 # Assuming the button is unpressed initially while True: # Read the current state of the button button_state = button.value() # Check if button was released if prev_button_state == 0 and button_state == 1: print("The button is released") utime.sleep_ms(DEBOUNCE_TIME) # Check if button was pressed if prev_button_state == 1 and button_state == 0: print("The button is pressed") utime.sleep_ms(DEBOUNCE_TIME) # Save the current state as the previous state for the next loop iteration prev_button_state = button_state

Étapes rapides

  • Copiez le code MicroPython ci-dessus et collez-le dans l'éditeur de Thonny.
  • Enregistrez le code sur votre Raspberry Pi Pico.
  • Cliquez sur le bouton vert Exécuter (ou appuyez sur F5) pour exécuter le script.
  • Appuyez sur le bouton pendant quelques secondes, puis relâchez-le.
  • Consultez la sortie dans le Shell en bas de Thonny.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot The button is pressed The button is released
MicroPython (Raspberry Pi Pico) • Board CDC @ COM29 ≡

Vous avez cliqué sur le bouton une fois, et le Raspberry Pi Pico l'a reconnu avec précision comme une seule pression et un relâchement, sans aucun bruit supplémentaire.

※ Note:

Différentes applications utilisent différentes valeurs DEBOUNCE_TIME. Chaque application peut avoir une valeur spécifique.

Le code ci-dessus utilise utime.sleep_ms() pour effectuer l'anti-rebond du bouton. Cette fonction bloque le Raspberry Pico et l’empêche d’effectuer d’autres tâches pendant la durée du sommeil. Ensuite, nous examinerons un autre exemple qui montre comment réaliser l’anti-rebond sans bloquer les autres tâches.

Raspberry Pi Pico - Bouton avec anti-rebond non bloquant

/* * Ce code Raspberry Pi Pico a été développé par newbiely.fr * Ce code Raspberry Pi Pico est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/raspberry-pico/raspberry-pi-pico-button-debounce */ from machine import Pin import time BUTTON_PIN = 0 # The Raspberry Pi Pico pin connected to the button (GP0) DEBOUNCE_TIME = 100 # debounce time in milliseconds # Setup the button pin with internal pull-up resistor button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP) # Initialize variables to track the debounce status last_steady_state = button.value() last_flickerable_state = button.value() last_debounce_time = time.ticks_ms() while True: current_state = button.value() current_time = time.ticks_ms() # Check if the current state is different from the last flickerable state if current_state != last_flickerable_state: # Reset the debounce timer last_debounce_time = current_time # Update the last flickerable state last_flickerable_state = current_state # Check if the debounce period has passed since the last state change if time.ticks_diff(current_time, last_debounce_time) > DEBOUNCE_TIME: # If the steady state is different from the current state after the debounce time, update it if current_state != last_steady_state: if last_steady_state == 1 and current_state == 0: print("The button is pressed") elif last_steady_state == 0 and current_state == 1: print("The button is released") # Update the steady state last_steady_state = current_state # Short delay to prevent the loop from running too quickly time.sleep(0.01)

Raspberry Pi Pico - Anti-rebond en utilisant une bibliothèque

Le code d'anti-rebond peut sembler complexe, surtout lorsqu'on utilise plusieurs boutons. Heureusement, il existe une méthode plus simple pour les débutants qui doivent gérer plusieurs boutons. Cette méthode utilise une bibliothèque appelée DIYables_MicroPython_Button. Vous pouvez en savoir plus sur la bibliothèque DIYables_MicroPython_Button ici.

Voyons quelques exemples de codes.

Code d'anti-rebond du bouton Raspberry Pi Pico pour un seul bouton

/* * Ce code Raspberry Pi Pico a été développé par newbiely.fr * Ce code Raspberry Pi Pico est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/raspberry-pico/raspberry-pi-pico-button-debounce */ from DIYables_MicroPython_Button import Button import time # Initialize buttons connected to GPIO pins GP0 button = Button(0) button.set_debounce_time(100) # Set debounce time to 100 milliseconds while True: button.loop() if button.is_pressed(): print("The button is pressed") if button.is_released(): print("The button is released")
Étapes rapides
  • Dans l’IDE Thonny, accédez à Outils Gérer les paquets.
  • Recherchez “DIYables-MicroPython-Button”, puis trouvez la bibliothèque Button créée par DIYables.
  • Cliquez sur DIYables-MicroPython-Button, puis cliquez sur le bouton Install pour installer la bibliothèque Button.
Bibliothèque de boutons pour Raspberry Pi Pico
  • Copier le code ci-dessus et le coller dans l'éditeur de l'IDE Thonny.
  • Enregistrez le script sur votre Raspberry Pi Pico.
  • Cliquez sur le bouton vert Exécuter (ou appuyez sur F5) pour exécuter le script. Le script s'exécutera.
  • Appuyez sur le bouton.
  • Vérifiez le message dans le Shell en bas de Thonny.

Code d'anti-rebond des boutons du Raspberry Pi Pico pour plusieurs boutons

Mettons en place l’anti-rebond pour trois boutons. Voici le schéma de câblage entre le Raspberry Pi Pico et les trois boutons :

Schéma de câblage de la bibliothèque de boutons du Raspberry Pi Pico

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

/* * Ce code Raspberry Pi Pico a été développé par newbiely.fr * Ce code Raspberry Pi Pico est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/raspberry-pico/raspberry-pi-pico-button-debounce */ from DIYables_MicroPython_Button import Button import time # Initialize buttons connected to GPIO pins 7, 8, and 9 button_1 = Button(7) button_2 = Button(8) button_3 = Button(9) button_1.set_debounce_time(100) # Set debounce time to 100 milliseconds button_2.set_debounce_time(100) # Set debounce time to 100 milliseconds button_3.set_debounce_time(100) # Set debounce time to 100 milliseconds while True: button_1.loop() button_2.loop() button_3.loop() if button_1.is_pressed(): print("The button 1 is pressed") if button_1.is_released(): print("The button 1 is released") if button_2.is_pressed(): print("The button 2 is pressed") if button_2.is_released(): print("The button 2 is released") if button_3.is_pressed(): print("The button 3 is pressed") if button_3.is_released(): print("The button 3 is released")

Vidéo

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !