<aside> 💡 Objectifs d'apprentissage de cette section : utiliser les touches (boutons) de l'Oxocard pour développer des programmes interactifs

</aside>

Les boutons de l'Oxocard

L'Oxocard comporte 6 boutons qui peuvent être adressés via les constantes prédéfinies BUTTON_L1, BUTTON_L2, BUTTON_L3, BUTTON_R1, BUTTON_R2 et BUTTON_R3.

<aside> 💡 Information technique Les boutons sont connectés aux broches suivantes :

BUTTON_L1 Pin(0) BUTTON_L2 Pin(32) BUTTON_L3 Pin(33) BUTTON_R1 Pin(14) BUTTON_R2 Pin(13) BUTTON_R3 Pin(27)

</aside>

Il y a deux façons d'enregistrer les valeurs des boutons :

En faisant du "polling"

Le "polling" consiste à interroger sans arrêt à intervalles réguliers l'état des boutons. On peut ainsi régulièrement demander si un bouton est ou a été enfoncé. Si c'est le cas, un certain bloc de programme est exécuté.

Avec les événements

Un clic sur un bouton est considéré comme un événement. Une fonction (fonction de rappel) est automatiquement appelée pour réagir à l'événement.

Exemples

Interroger l'état actuel des boutons par polling (appuyé/relâché)

On commence par créer un objet de la classe Buttonavec l'instruction

button = Button(BUTTON_R2)

Cet objet permet d'interroger le bouton en bas à droite. Il faut d'abord importer le module oxobutton. La classe Button fournit diverses fonctions, que l'on appelle aussi méthodes, puisqu'elles appartiennent à une classe.

La méthode button.isPressed() retourne True si le bouton est appuyé au moment de l'appel.

Le programme interroge l'état du bouton R2 au sein d'une boucle infinie jusqu'à ce que le bouton soit enfoncé. Ensuite, toutes les 0.1 secondes, un carré rouge apparaîtra et disparaîtra tant que vous maintiendrez le bouton enfoncé.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/886899cb-38f0-4614-b4c8-4626b5b7817d/Untitled.png

from oxocardext import *
from oxobutton import *

button = Button(BUTTON_R2) 
while True:
    if button.isPressed():
        fillRectangle(2, 2, 4, 4, RED)
        sleep(0.2)
        clear()  
    sleep(0.2)

Faire du polling pour réagir aux clics sur un bouton

Comme pour le clic sur un bouton d'une souris, on voudrait pouvoir réagir aux clics effectués sur un bouton. Mais il n'est pas possible de capturer un clic de courte durée avec isPressed(), car la fonction isPressed() ne sera certainement pas appelée au moment même où le bouton sera enfoncé. La méthode wasPressed() "se souvient" si le bouton a été pressé et relâché depuis le dernier appel.

L'exemple ci-dessous utilise les boutons en bas à gauche et en bas à droite pour dessiner une flèche vers la gauche et vers la droite, respectivement.

L'instruction sleep(0.1) est importante pour ne pas gaspiller inutilement des ressources du processeur alors que le programme n'a rien d'autre à faire que de vérifier si un bouton a été pressé.

En augmentant le temps d'attente à 1 s, on peut constater que le clic est effectivement détecté même lorsque le programme est en sommeil.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a330621b-e18b-4d30-85a0-f845f1c342c7/Untitled.png