-> Ce tutoriel s'adresse à la ou aux personnes qui feront la partie Télescope spatial de l'activité. Les parties Terre et Satellite-relais doivent également être faites pour que l'activité puisse avoir lieu.
Le télescope spatial veut transmettre une série de données pour indiquer l'emplacement d'une étoile lointaine au centre de commandement sur Terre.
Le problème est que le télescope a terminé sa mission il y a maintenant quelques années, et que plus personne n'écoute dans sa direction.
Votre rôle dans cette mission est de transmettre les données brutes au satellite relais. La Terre vous transmettra des informations pour confirmer ce qu'elle a reçu.
Pour réussir votre mission, vous devrez :
- Choisir en équipe un numéro de groupe entre 0 et 255 qui sera unique à votre équipe. Assurez-vous que les autres équipes de la classe ne prennent pas le même numéro.
- Respecter en équipe un protocole de communication qui utilise seulement les chiffre 0, 1 et -1. Ce sera cette méthode de communication qui va permettre à la Terre de trouver l'emplacement de l'étoile sur un plan. Le protocole sera expliqué après la partie programmation de l'activité.
- Envoyer des données au satellite-relais.
- Visualiser les données de confirmation envoyées par le centre de commandement sur Terre quand ils reçoivent vos données pour s'assurer qu'ils ont reçu les bonnes informations.
Les détails du défi se trouvent à la dernière étape de cette activité.
Bonne chance!
Astuce : Si les instructions prennent trop de place à l'écran, simplement cliquer sur le bouton "Moins..." en gris au centre entre la fenêtre d'instruction et l'espace de programmation.
La première chose à faire est d'initialiser la radio.
- Aller dans la section
||radio:radio||
pour trouver le bloc||radio:définir groupe||
, puis le mettre dans le bloc||basic:au démarrage||
. - Attribuer la valeur de votre numéro de groupe au bloc
||radio:définir groupe||
. Si une autre équipe a la même valeur de groupe, vos messages seront mélangés, ce qui va nuire à votre mission.
À noter! Il arrive que les images de la bulle d'aide soient différentes de ce que l'on retrouve dans l'espace de programmation : couleurs différentes, noms en anglais, noms de variables différents des instructions, etc. Pas de problème, il s'agit simplement d'un caprice d'affichage de la plateforme MakeCode que vous pouvez ignorer.
radio.setGroup(0)
Lorsqu'une donnée est reçue du centre de contrôle sur la Terre, nous voulons la voir affichée.
- Toujours dans la section
||radio:radio||
, trouver le bloc||radio:quand une donnée est reçue par radio receivedString||
et le glisser dans la page de programmation. - Ensuite, aller dans
||logic:logique||
pour trouver le bloc||logic:si <vrai> alors||
et le mettre dans le bloc radio qu'on vient de prendre. - Cliquer sur le "+" pour ajouter 4 autres sections "sinon" dans ce bloc.
radio.onReceivedString(function (receivedString) {
if (True) {
} else if (True) {
} else if (True) {
} else if (True) {
} else {
}
})
Les données qui seront reçues peuvent être "n" pour Nord, "e" pour Est, "s" pour Sud, "o" pour Ouest, et "v" pour Valider. Lorsque nous recevrons ces lettres – qui sont appelées chaînes de caractères en programmation –, nous voudrons afficher sur le micro:bit une image qui lui correspond. Commençons par "n".
- Aller dans la section
||logic:logique||
, y trouver||logic:" " = " "||
, et le glisser à la place du premier||logic:<vrai>||
. - Dans le cercle de gauche, glisser la variable
||variables:receivedString||
qui se trouve dans||radio:quand une donnée est reçue par radio||
. - Dans le cercle de droite, inscrire "n".
- Dans la section
||basic:base||
, trouver le bloc||basic:montrer la flèche||
et la mettre dans ce bloc. - Choisir "Nord" dans ce bloc.
radio.onReceivedString(function (receivedString) {
if (receivedString == "n") {
basic.showArrow(ArrowNames.North)
} else if (True) {
} else if (True) {
} else if (True) {
} else {
}
})
Refaire la même chose pour les autres lettres "e" Est, "s" Sud, et "o" Ouest.
radio.onReceivedString(function (receivedString) {
if (receivedString == "n") {
basic.showArrow(ArrowNames.North)
} else if (receivedString == "e") {
basic.showArrow(ArrowNames.East)
} else if (receivedString == "s") {
basic.showArrow(ArrowNames.South)
} else if (receivedString == "o") {
basic.showArrow(ArrowNames.West)
} else {
}
})
Si ce que nous recevons n'est pas une de ces quatre lettres, faisons afficher un symbole de validation.
- Dans la section
||basic:base||
, trouver le bloc||basic:montrer l'icône||
et la mettre dans la section||logic:sinon||
du bloc. - Choisir l'image qui montre un crochet de validation.
radio.onReceivedString(function (receivedString) {
if (receivedString == "n") {
basic.showArrow(ArrowNames.North)
} else if (receivedString == "e") {
basic.showArrow(ArrowNames.East)
} else if (receivedString == "s") {
basic.showArrow(ArrowNames.South)
} else if (receivedString == "o") {
basic.showArrow(ArrowNames.West)
} else {
basic.showIcon(IconNames.Yes)
}
})
Finalement, nous voulons nettoyer l'écran une fois l'information reçue.
- Trouver le bloc
||basic:pause (ms)||
et le mettre après et en dehors du multibloc||logic:si <> alors||
, puis y inscrire le nombre 200. - Trouver le bloc
||basic:effacer l'écran||
et le mettre à la suite.
radio.onReceivedString(function (receivedString) {
if (receivedString == "n") {
basic.showArrow(ArrowNames.North)
} else if (receivedString == "e") {
basic.showArrow(ArrowNames.East)
} else if (receivedString == "s") {
basic.showArrow(ArrowNames.South)
} else if (receivedString == "o") {
basic.showArrow(ArrowNames.West)
} else {
basic.showIcon(IconNames.Yes)
}
basic.pause(200)
basic.clearScreen()
})
Il faut maintenant pouvoir transmettre des données qui seront retransmises par le satellite-relais. Puisque nous pouvons envoyer trois types de caractères (0,1 et -1), il faudra faire trois groupes de blocs similaires. Voici comment faire le premier :
- Dans
||input:entrée||
, prendre le bloc||input:lorsque le bouton A est pressé||
. - Y insérer le bloc
||radio:envoyer la valeur "" = 0 par radio||
. - Inscrire "relais" à gauche du "=", et laisser le chiffre à 0.
input.onButtonPressed(Button.A, function () {
radio.sendValue("relais", 0)
})
Quand nous envoyons une donnée, elle s'affiche à l'écran, puis l'écran est nettoyé. Commençons par "0".
Dans la section ||basic:base||
:
- Trouver le bloc
||basic:montrer nombre 0||
et le mettre sous||radio:envoyer la valeur||
. - Trouver le bloc
||basic:pause (ms)||
et le mettre à la suite, puis y inscrire le nombre 100. - Trouver le bloc
||basic:effacer l'écran||
et le mettre à la suite.
input.onButtonPressed(Button.A, function () {
radio.sendValue("relais", 0)
basic.showNumber(0)
basic.pause(100)
basic.clearScreen()
})
Refaire la même chose qu'à l'étape précédente, mais cette fois pour le "1". La fonction Dupliquer va nous aider.
- Sur le bloc
||input:lorsque le bouton A est pressé||
que nous avons créé à l'étape précédente, faire clic droit, puis Dupliquer. - Changer le
||input:bouton A||
pour le||input:bouton B||
. - Changer le 0 pour 1 aux deux endroits où il apparait.
input.onButtonPressed(Button.B, function () {
radio.sendValue("relais", 1)
basic.showNumber(1)
basic.pause(100)
basic.clearScreen()
})
Refaire encore la même chose, mais cette fois pour le "-1".
- Sur le bloc
||input:lorsque le bouton A est pressé||
, faire clic droit, puis Dupliquer. - Changer le
||input:bouton A||
pour le||input:bouton A+B||
. - Changer le 0 pour -1 aux deux endroits où il apparait.
input.onButtonPressed(Button.AB, function () {
radio.sendValue("relais", -1)
basic.showNumber(-1)
basic.pause(100)
basic.clearScreen()
})
Voilà, le code est maintenant prêt! Le voici au complet. N'oubliez pas de faire dérouler l'image d'aide vers le bas pour le voir au complet.
input.onButtonPressed(Button.A, function () {
radio.sendValue("relais", 0)
basic.showNumber(0)
basic.pause(100)
basic.clearScreen()
})
input.onButtonPressed(Button.AB, function () {
radio.sendValue("relais", -1)
basic.showNumber(-1)
basic.pause(100)
basic.clearScreen()
})
radio.onReceivedString(function (receivedString) {
if (receivedString == "n") {
basic.showArrow(ArrowNames.North)
} else if (receivedString == "e") {
basic.showArrow(ArrowNames.East)
} else if (receivedString == "s") {
basic.showArrow(ArrowNames.South)
} else if (receivedString == "o") {
basic.showArrow(ArrowNames.West)
} else {
basic.showIcon(IconNames.Yes)
}
basic.pause(200)
basic.clearScreen()
})
input.onButtonPressed(Button.B, function () {
radio.sendValue("relais", 1)
basic.showNumber(1)
basic.pause(100)
basic.clearScreen()
})
radio.setGroup(0)
Il ne reste qu'à téléverser le code sur le micro:bit, et vous êtes prêt·e.
Si vous avez besoin de vous rafraîchir la mémoire au sujet du téléversement du code, voyez ici la vidéo aide-mémoire par GénieLab, et voici la procédure détaillée dans la documentation de MakeCode (en anglais seulement).
Lorsque vous et vos coéquipiers et coéquipières serez prêtes, vous pourrez commencer la mission comme telle, qui se trouve à la prochaine étape. En attendant, vous pouvez :
- Vous pratiquer pour maitriser les boutons.
- Pouvez-vous trouver une façon d'améliorer l'affichage à l'écran du micro:bit?
Lorsque tout le monde est prêt, aller à la prochaine étape.
Votre défi : guider l'équipe sur Terre pour qu'elle trouve la bonne étoile d'où provient le message, à l'aide de la carte suivante.
Voici le protocole de communication :
A) -1 veut dire une case vers la gauche B) 1 veut dire une case vers la droite C) Quand 0 est envoyé, ça veut dire que le déplacement horizontal est terminé, et qu'on commence le déplacement vertical D) -1 veut alors dire une case vers le bas E) 1 veut alors dire une case vers le haut F) Pour vous assurer que les informations sont bien reçues, la Terre envoie un message de confirmation à chaque fois qu'elle reçoit un message : N pour vers le haut, S pour vers le bas, O pour vers la gauche, et E pour vers la droite.
- La personne qui joue le rôle du télescope spatial (vous) choisit secrètement une étoile sur la carte.
- En utilisant le l'étoile Polaire (centre de l'image) comme point de départ, donner des instructions pour que la Terre puisse correctement identifier cette étoile secrète.
Bonne chance!