===== Succinctement pour créer un bloc, voici la démarche en prenant pour exemple les blocs Grove : ===== **1 - copier le fichier arduino.xml situé dans /blocks/toolbox, ** le renommer (** // grove.xml // ** ) en fonction des blocs à afficher dans la Toolbox (le menu de gauche) et rajouter des entrées en bas du fichier : //on va se servir de cet exemple de fonction Tous ces noms de fonctions serviront comme titre de chaque fonction dans les définitions des blocs : //points **3** & **4** ci-après// pour l'exemple 'grove_led'. Ils sont une référence à un fichier qui contient le texte, autorisant le multilinguisme du site : //point **6** ci-après// pour l'exemple 'grove_led'. **2 - dans le fichier /lang/code.js rajouter à partir de la ligne 83** la référence à ce fichier **grove.xml ** créé au point //**1**//, et qui sera ainsi dans le menu déroulant des choix : Code.TOOLBOX_NAME = { 'standard':'Standard', 'arduino':'Arduino', 'grove':'Grove' }; //ATTENTION ! Le dernier ne doit pas avoir de virgule en fin de ligne.// **3 - définir les fonctions dans un fichier spécifique situé dans '/generators/arduino/grove.js '. ** Ce fichier contient les procédures pour écrire dans le code Arduino, exemple du bloc '//grove_led//' que l'on voyait dans le fichier ** grove.xml ** dans le//** point 1 **//: Blockly.Arduino.grove_led = function() { var dropdown_pin = this.getFieldValue('PIN'); var dropdown_stat = this.getFieldValue('STAT'); Blockly.Arduino.setups_['setup_green_led_'+dropdown_pin] = 'pinMode('+dropdown_pin+', OUTPUT);'; //texte nécessaire dans le setup() var code = 'digitalWrite('+dropdown_pin+','+dropdown_stat+');\n' //création de l'instruction dans la loop() return code; }; **4 - définir les blocs correspondant aux fonctions dans un fichier spécifique situé dans '/blocks/grove/grove.js '. ** Ce fichier contient les détails des blocs graphiques : Blockly.Blocks['grove_led'] = { init: function() { this.setColour(190); this.setHelpUrl(Blockly.Msg.GROVE_INOUT_LED_HELPURL); //référence relative qui sera complété par /blocks/fr.js this.appendDummyInput() .appendField(Blockly.Msg.GROVE_INOUT_LED_INPUT1) .appendField(new Blockly.FieldImage("http://www.seeedstudio.com/wiki/images/thumb/e/e0/LED1.jpg/400px-LED1.jpg", 64, 64)) //privilégier les images en local dans le dossier du fichier js de définition .appendField(Blockly.Msg.GROVE_INOUT_LED_INPUT2) .appendField(new Blockly.FieldDropdown(profile.default.digital), "PIN") .appendField(Blockly.Msg.GROVE_INOUT_LED_INPUT3) .appendField(new Blockly.FieldDropdown([["1 - haut", "HIGH"], ["0 - bas", "LOW"]]), "STAT"); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(Blockly.Msg.GROVE_INOUT_LED_TOOLTIP); } }; {{:fr:arduino:blocklyduino:del2.jpg?nolink&503x96}} **5****- rajouter les références à ces 2 fichiers dans le haut de 'index.html' :** Blockly Arduino //définition des dessins des blocs //définition des fonctions produisant le code **6 - on termine avec les traductions** afin que les textes soient appelés en 'relatif' depuis les fichiers de langue. → Tout d'abord dans **/lang/msg/fr.js** on rajoute les entrées générales : catégories & titres des boutons. Blockly.Msg.CAT_ARDUINO_SERVO = "servo-moteur"; Blockly.Msg.CAT_GROVE = "Grove"; Blockly.Msg.CAT_GROVE_IN = "capteurs"; Blockly.Msg.CAT_GROVE_OUT = "actionneurs"; Blockly.Msg.CAT_GROVE_LCD = "écran LCD"; Blockly.Msg.CAT_GROVE_COMM = "communication"; → Ensuite dans **/lang/blocks/fr.js** on rajoute toutes les définitions des textes visibles dans les blocs : Blockly.Msg.ARDUINO_SERIAL_PRINT_CONTENT = "envoyer sur le port série la donnée :"; Blockly.Msg.ARDUINO_SERIAL_PRINT_TOOLTIP = "envoie des données sur le port série pour surveillance par le moniteur en ASCII"; Blockly.Msg.GROVE_INOUT_LED_HELPURL = "http://www.seeedstudio.com/wiki/index.php?title=GROVE_-_Starter_Bundle_V1.0b#LED"; Blockly.Msg.GROVE_INOUT_LED_INPUT1 = "mettre la DEL"; Blockly.Msg.GROVE_INOUT_LED_INPUT2 = "sur la broche Digital"; Blockly.Msg.GROVE_INOUT_LED_INPUT3 = "à l'état"; Blockly.Msg.GROVE_INOUT_LED_TOOLTIP = "active la sortie Digital sur laquelle la DEL est branchée"; **7 - on tweak !** Il suffit de modifier les textes qui sont ainsi TOUS contenus dans** /lang/blocks/fr.js** et permet d'aller vite pour remplacer par exemple '//Digital//' par '//Numérique//'. On peut aussi changer la nature du bloc facilement, à vous de tester cette autre version : Blockly.Blocks['grove_led'] = { init: function() { this.setColour(190); this.setHelpUrl(Blockly.Msg.GROVE_INOUT_LED_HELPURL); this.appendDummyInput() .appendField(Blockly.Msg.GROVE_INOUT_LED_INPUT1) .appendField(new Blockly.FieldImage("http://www.seeedstudio.com/wiki/images/thumb/e/e0/LED1.jpg/400px-LED1.jpg", 64, 64)) this.appendValueInput("PIN", 'Number') .setCheck('Number') .setAlign(Blockly.ALIGN_RIGHT) .appendField(Blockly.Msg.GROVE_INOUT_LED_INPUT2); //this.setInputsInline(true); this.appendDummyInput("") .setAlign(Blockly.ALIGN_RIGHT) .appendField(Blockly.Msg.GROVE_INOUT_LED_INPUT3) .appendField(new Blockly.FieldDropdown([["1 - haut", "HIGH"], ["0 - bas", "LOW"]]), "STAT"); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(Blockly.Msg.GROVE_INOUT_LED_TOOLTIP); } }; {{:fr:arduino:blocklyduino:del1.jpg?nolink&498x105}} et si vous décommentez (//enlevez les// //) // la ligne '' '' //''this.setInputsInline(true); '' vous obtiendrez : {{:fr:arduino:blocklyduino:del3.jpg?nolink&215x149}}//