Scratch et mBlocks
Utiliser Scratch et mBlock avec Gemini
Nous allons voir comment créer des extensions mBlock afin de pouvoir utiliser cet environnement de développement Scratch avec Gemini.
A lire également, l’excellent tutoriel « Creating mBlock Extensions » de Wang Yu, Product Manager chez MakeBlock.
En attendant, voici quelques informations complémentaires bien utiles pour mener la création d’extensions à terme facilement.
Les balises:
« inc »:
« inc »: » » permet de définir les include du croquis Arduino.
Exemple:
"inc":"#include \"myLib.h\"\n",
Cette ligne créera le source suivant dans le croquis Arduino:
#include "myLib.h"
La séquence \ » permet de placer un guillemet sur la ligne, sans qu’il ne soit pris pour le guillemet final.
Cet include peut être mis dans le marqueur « h »:
[
"h",
"Gemini program",
"runArduino",
{
"setup":"",
"inc":"#include \"myLib.h\"\n",
"def":"",
"work":"",
"loop":""
}
],
« def »:
Cette balise va nous permettre de placer des #define dans le code Arduino:
[
"w",
"Beep",
"Beep",
{
"setup":"",
"inc":"",
"def":" #define BUZZER 8\n",
"work":" tone(BUZZER, 4000);\n delay(125);\n noTone(BUZZER);\n", "loop":""
}
]
Ce qui donnera dans l’IDE Arduino:
#define BUZZER 8
« work »:
Cette balise permet de placer le code à exécuter.
[
"w",
"Beep",
"Beep",
{
"setup":"",
"inc":"",
"def":" #define BUZZER 8\n",
"work":"tone(BUZZER, 4000);\n delay(125);\n noTone(BUZZER);\n", "loop":""
}
]
Qui donnera en code Arduino:
tone(BUZZER, 4000);
delay(125);
noTone(BUZZER);
« loop »:
Cette balise va permettre de faire exécuter le code résultant du test à partir d’un appel de la boucle principale:
[
"B",
"Lumière( %m.ldr %n)",
"Lumière", "Gauche", "700",
{
"setup":"",
"inc":"",
"def":"",
"work":"(analogRead(A{0}) > {1})",
"loop":"analogRead(A{0});"
}
],
Le code Arduino correspondant va être le suivant, en considérant que la variable %n a reçu la valeur 700:
void loop(){
if((analogRead(A0) > 700)){
mcp.digitalWrite(13+0, HIGH);
}else{
mcp.digitalWrite(13+0, LOW);
}
if((analogRead(A1) > 700)){
mcp.digitalWrite(9+0, HIGH);
}else{
mcp.digitalWrite(9+0, LOW);
}
_loop();
}
void _loop(){
analogRead(A0);
}
« encode »:
Cette balise va également permettre de faire exécuter le code dans la boucle principale si la condition du test est remplie :
[
"B",
"Lumière( %m.ldr %n)",
"Lumière", "Gauche", "700",
{
"encode":"{d0}",
"setup":"",
"inc":"",
"def":"",
"work":"(analogRead(A{0}) > {1})", "loop":""
}
],
Le code Arduino correspondant va être le suivant, en considérant que la variable %n a reçu la valeur 700:
void loop(){
if((analogRead(A0) > 700)){
mcp.digitalWrite(13+0, HIGH);
}else{
mcp.digitalWrite(13+0, LOW);
}
//....
_loop();
}
void _loop(){
}
Le Répertoire src:
Pour être pris en compte, les fichiers de librairie doivent être copiés dans le répertoire src du projet mBlock.
Comment passer une valeur par variable ?
Pour passer une valeur comme une variable, on va utiliser le symbole %.
Par exemple, les Leds de Gemini soit bicolore, Vertes et Rouges.
On va donc créer un seul bloc pour tous les cas, en y insérant une liste de choix. Cette liste comprendra VERT et ROUGE.
Le code ressemblera à celui-ci:
[
"w",
"Configure Led( %d.couleur )",
"Configure Led",
"VERTE",
{
"setup":" digitalWrite({0}, OUTPUT);\n",
"inc":"",
"def":"",
"work":"",
"loop":""
}
],
Ici, le bloc de choix se définira par:
"Configure Led( %d.couleur )",
Cependant ATTENTION: La liste déroulante n’apparaitra que si les parenthèses sont encadrées d’espace comme dans notre exemple. Si les parenthèses sont collées au texte, les boites déroulantes ne se déroulent pas …
Ensuite, pour faire la liaison avec les valeurs de la liste déroulante, il faut deux autres étapes:
"menus": {
"couleur":["ROUGE","VERTE"]
},
et
"values":{ "ROUGE":10, "VERTE":9 },
« menu » va permettre de définir les choix disponibles dans le menu déroulant, tandis que « values » va faire la liaison entre ces items de la liste déroulante, et les valeurs numériques associées.
La valeur choisie par l’utilisateur se récupèrera ainsi:
"setup":" digitalWrite({0}, OUTPUT);\n",
Au final, on obtiendra un résultat de ce style, et comme on le voit ici, il est également possible de créer des Blocs Personnalisés (en bleu)
Et sur Gemini en action ...