<aside> 💡 Objectifs d'apprentissage de cette section : utiliser les touches (boutons) de l'Oxocard pour développer des programmes interactifs
</aside>
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 :
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é.
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.
On commence par créer un objet de la classe Button
avec 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é.
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)
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.