TigerJython4Kids
micro:bit Robotik
buttons
Deutsh   English   Franšais

4. BOUTONS

 

 

OBJECTIFS DE CETTE SECTION

 

Utilisez les deux boutons pour développer des programmes interactifs.

 

 

RÉAGIR À LA PRESSION SUR UN BOUTON

 

Le micro:bit dispose de deux boutons programmables. Le bouton de gauche correspond à la variable globale button_a et le bouton droit à button_b.

La méthode button_a.is_pressed() retourne True lorsqu’elle est invoquée au moment où le bouton gauche est enfoncé. Le bouton droit fonctionne de manière analogue.

 

 

 

Le programme ci-dessous attend au sein d’une boucle infinie que le bouton A soit pressé. Dès que la pression a été détectée, la LED centrale de l’écran commence à clignoter avec une période de 2 secondes aussi longtemps que le bouton A reste enfoncé.

Pour mieux structurer le programme, on définit une fonction blink(x, y) qui allume et éteint la LED en position (x, y).

 


Program:

from microbit import *

def blink(x, y):
    display.set_pixel(x, y, 9)
    sleep(1000)    
    display.set_pixel(x, y, 0)
    sleep(1000)    

while True:
    if button_a.is_pressed():
        blink(2, 2)
    sleep(10)    
► Copy to clipboard

L’instruction sleep(10) à la fin de la boucle infinie est nécessaire pour éviter que toutes les ressources du CPU soient utilisées uniquement pour contrôler si le bouton a été enfoncé. En effet, il suffit de faire cette vérification toutes les 10 millisecondes.

 

 

RÉAGIR AU CLIC SUR UN BOUTON

 

On peut cliquer sur un bouton du micro:bit (presser et relâcher rapidement) comme sur une souris pour interrompre le programme et lancer une action spéciale.

En l’occurrence, on aimerait faire clignoter la LED centrale avec une période de 2 secondes et, lors d’un clic sur le bouton A, on veut interrompre ce clignotement et afficher un carré.

Malheureusement, le programme suivant ne fonctionne pas comme attendu.

 


Program:

from microbit import *

def blink(x, y):
    display.set_pixel(x, y, 9)
    sleep(1000)    
    display.set_pixel(x, y, 0)
    sleep(1000)    

while True:
    if button_a.is_pressed():
        display.show(Image.SQUARE)
        sleep(1000)
        display.clear()
    blink(2, 2)
    sleep(10)
► Copy to clipboard

Le problème vient du fait que le programme passe la majorité de ce son temps à faire clignoter la LED au sein de la fonction blink(x, y) et qu’il n’est dès lors pas en mesure d’exécuter suffisamment souvent le code permettant de détecter le clic.

Pour résoudre ce problème, il faut plutôt utiliser la méthode button_a.was_pressed(). Le clic va alors être représenté par un événement qui est enregistré par le système même si le programme est en train de faire autre chose pendant que le bouton est cliqué.

Program:

from microbit import *

def blink(x, y):
    display.set_pixel(x, y, 9)
    sleep(1000)    
    display.set_pixel(x, y, 0)
    sleep(1000)    

while True:
    if button_a.was_pressed():
        display.show(Image.SQUARE)
        sleep(1000)
        display.clear()
    blink(2, 2)
    sleep(10)    
► Copy to clipboard

 

 

NOTA BENE

 

Il est donc possible de réaliser des programmes interactifs qui réagissent à une pression ou à un clic sur les boutons de micro:bit. La méthode .is_pressed() retourne True si le bouton est pressé au moment de l’appel alors que la méthode .was_pressed() retourne True si le bouton a été pressé depuis le début de l’exécution du programme ou depuis le dernier appel de cette même méthode.

 

 

EXERCICES

 

 

1.

Programmer le comportement suivant des boutons :

Lorsque le bouton A est enfoncé, une flèche vers la gauche apparaît sur l’écran. Lorsque c’est le bouton B qui est enfoncé, une flèche vers la droite est affichée sur l’écran.
 

2.

Programme un compteur de clics. Lors de chaque clic sur le bouton A, un compteur initialement mis à 0 est incrémenté et affiché dans le terminal. Lors d’un clic sur le bouton B, la valeur du compteur doit être affichée sur l’écran LED comme un texte défilant.

Remarque : la méthode .scroll() ne peut afficher que des chaines de caractères. Il faut donc penser à utiliser str(n) pour convertir la valeur entière en chaine de caractères.



3.

On veut utiliser le micro:bit pour créer un dé numérique. Lors de chaque clic sur le bouton A, un nombre aléatoire entre 1 et 5 est tiré puis affiché sur l’écran en allumant les LEDs adéquates.

Indication : le plus simple est d’afficher des images correspondant à chaque nombre. Pour le nombre 4, on prendra par exemple l’image

img = Image('00000:09090:00000:09090:00000:')