Dans le cours précédent, on a utilisé la fonction native de MakeCode pour détecter le mouvement. Cela fonctionne mais peut donner des résultats surprenants : en effet, la moindre secousse peut être enregistrée en tant que pas, ce qui n’est pas toujours le cas. Pour résoudre cela, nous allons affiner notre code, en ne prenant en compte que les variations vraiment significatives : ce sont celles-là qui seront considérées comme des pas.

Pour cet exercice, nous allons créer un nouveau projet dans MakeCode

1 – Pour mener à bien notre projet, il nous faut créer des variables pour stocker des informations :
– la variable nombre de pas
– la variable enMouvement.

La variable enMouvement a comme rôle de prendre une valeur de Vrai ou Faux. On appelle cela une variable de type Booléen. Nous y reviendrons dans un autre article.

Au départ, le nombre de pas est à 0.
Au départ, on détermine enMouvement à Faux, car il n’y aucun mouvement.

Le rôle de la variable enMouvement est d’autoriser ou d’interdire de compter les pas. En effet, si on ne fixe pas un délai entre chaque pas, le code risque de comptabiliser plusieurs pas au lieu d’un seul. Donc, quand un pas est détecté la première fois, on passe la valeur à Vrai. Cela veut dire qu’il ne faut pas compter d’autre pas. Puis au bout d’une seconde, la variable redevient faux : on peut de nouveau compter le pas suivant.

2- L’objectif maintenant est de connaitre la véritable valeur de la force du mouvement de haut en bas. Pour cela, nous avons à disposition le bloc accéleration de y, disponible dans l’onglet Entrées.

Comment interpréter ce bloc accéleration de y ?

SituationValeur Y
Micro:bit immobile à plat0 (ou proche de 0)
Levé vers le hautpositif (ex: +500)
Abaissé vers le basnégatif (ex: −500)
Valeur maximum+1024
Valeur minimum−1024

Dans notre cas, nous voulons détecter les mouvements vers le haut et vers le bas, qui ont une force comprise entre 400 à 700 (c’est la force d’un pas).
En pratique :
Pas vers le bas : -600
Pas vers le haut : +600

Dans notre code :
– Est-ce que le -600 est compris entre -400 et -700 ?
– Est-ce que 600 est compris entre 400 et 700 ?

Pour simplifier, nous allons transformer la valeur de la variable force en valeur absolue.
La force -600 devient 600.
De cette façon, on n’a qu’une seule ligne de code. Le bloc valeur absolue est disponible dans l’onglet Maths et le bloc accélération dans l’onglet Entrées.

Tip

Quand vous travaillez avec une nouvelle entrée, ici accélération, assurez-vous, avant d’aller plus loin, que celle-ci renvoie déjà une valeur : c’est ce qu’on fait avec le bloc montrer nombre. Si un nombre apparait bien, alors on peut aller plus loin.

A présent, il ne nous reste plus qu’à écrire le pseudo-code correspondant à notre programme.
– Si force est supérieure à 400 ET inférieure à 700 ET que la valeur enMouvement est faux :
Alors, on incrémente (augmente) la variable pas de 1 et on passe enMouvement à vrai.
– Si force est inférieure à 200 : (pas assez fort)
Alors, on passe enMouvement à faux
On fait une pause de 100 millisecondes (0.1seconde)

Les opérateurs

Pour écrire cette condition, vous aurez besoin des opérateurs plus petit que(<), plus grand que (>) et égal, disponibles dans l’onglet Logique

Egalement, des opérateurs de type Booléen, qui prennent comme valeur Vrai ou Faux. Ce sont ces blocs que nous allons utiliser dans la condition.

A partir du pseudo-code vu juste avant, nous obtenons le code suivant

Il ne nous reste plus qu’à tester ce code et à vérifier son exactitude. Fait-il mieux que la version basique ? N’hésitez pas à comparer des situations avec la carte dans la main, dans la poche, à la cheville. D’une manière générale, vous devriez observer des différences, c’est l’occasion de tester avec d’autres valeurs dans la condition pour affiner et obtenir un décompte au plus juste.

Catégories : micro:bit

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *