Réaliser un compteur - niveau facile

L'idée dans ce mini projet est de réaliser un simple compteur. Chaque appui sur le bouton A incrémentera le compteur. Un appui sur le bouton B décrémentera le compteur. La problématique réside dans l'affichage du compteur de manière à ce qu'il tienne sur un seul écran de 25 LEDs. Jusqu'à combien peut-on compter ?

Ce mini projet est tout à fait accessible au niveau SNT.

MéthodePremière version

Dans cette version on affiche le compteur sous forme de chiffres. On peut donc compter jusqu'à 9, au delà, l'affichage n'est plus très exploitable...

1
from microbit import *
2
3
c=0
4
while True:
5
    if button_a.was_pressed():
6
        c += 1
7
    
8
    if button_b.was_pressed():
9
        c=0
10
        
11
    display.show(str(c))

MéthodeSeconde version

Nous avons 25 LEDs donc il ne doit pas être très difficile de compter jusqu'à 25 ! Voici donc une seconde version un peu plus intéressante car elle introduit deux boucles pour imbriquées. On peut aussi imaginer une variante avec un modulo et une division entière. Il y a donc une variété de solutions et des discussions intéressantes même pour un sujet aussi trivial !

1
from microbit import *
2
3
c=0
4
5
def affiche(c):
6
    k=0
7
    for y in range(5):
8
        for x in range(5):
9
            k+=1
10
            display.set_pixel(x, y, 9 if k<=c else 0)
11
12
while True:
13
    if button_a.was_pressed():
14
        c += 1
15
    
16
    if button_b.was_pressed():
17
        c=0
18
        
19
    affiche(c)

MéthodeTroisième version

Chaque LED possède 9 niveaux de couleur. Il n'est pas aisé de distinguer deux niveaux consécutifs mais on peut facilement distinguer entre rien, à moitié allumé et complètement allumé, ce qui fait deux niveaux d'illumination pour 25 LEDs donc un compteur jusqu'à 50 par écran ! Le projet commence à se compliquer...

1
from microbit import *
2
3
c=0
4
5
def affiche(c):
6
    k=-1
7
    for y in range(5):
8
        for x in range(5):
9
            k+=2
10
            if k<c:
11
                color=9
12
            elif k==c:
13
                color=4
14
            else:
15
                color=0
16
            display.set_pixel(x, y, color)
17
18
while True:
19
    if button_a.was_pressed():
20
        c += 1
21
    
22
    if button_b.was_pressed():
23
        c=0
24
        
25
    affiche(c)

MéthodeDernière version

Une LED est allumée ou éteinde, donc 1 ou 0... on arrive à la représentation binaire des nombres avec 2^25 soit plus de 33 millions de possibilités ! !

C'est l'occasion d'introduite aux élèves le principe de comptage en binaire. L'algorithme de conversion décimal-binaire ne sera pas exploité ici : on utilisera la fonction bin() de MicroPython à cet effet, mais cela peut être une évolution possible pour les plus forts...

1
from microbit import *
2
3
c=0
4
5
def affiche(c):
6
    x=0
7
    y=0
8
    binaire=bin(c)[2:]
9
    nbChiffres = len(binaire)
10
    display.clear()
11
    for i in range(nbChiffres):
12
        digit = binaire[nbChiffres-i-1]
13
        display.set_pixel(x,y,int(digit)*9)
14
        x+=1
15
        if x==5:
16
            x=0
17
            y+=1
18
19
while True:
20
    if button_a.was_pressed():
21
        c += 1
22
    
23
    if button_b.was_pressed():
24
        c=0
25
        
26
    affiche(c)