===== On se documente ? ===== {{https://cdn.sparkfun.com//assets/parts/6/6/6/0/11171-01.jpg?nolink&344x344 }}- Résolution vidéo : 720×480\\ - Fonction audio : Oui\\ - Image/sec : 28fps\\ - Taille de la tête pivotante : 25x25x28m\\ - Led : Bi-colore\\ - Type de carte : Micro SD-Card\\ - Rayon : 0.3 à l'infini\\ - Tension : 4.5V-6V\\ - Consommation : 180Mah\\ - Objectif : Orientable à 90°\\ - USB : Mini USB 1.1\\ - Modes : Vidéo, déclenchement à distance, photo enregistrement à 180° programmable [[:fr:arduino:flycam|http://tic.technologiescollege.fr/wiki/doku.php/fr/arduino/flycam]] [[http://www.camonetec.com/de/produkte/kamerasysteme/flycamone-eco-v2.html|http://www.camonetec.com/de/produkte/kamerasysteme/flycamone-eco-v2.html]] Donc il faudra lui envoyer des //**commandes de servomoteur**//, ça tombe bien des blocs sont déjà prêts… **LECOPIER-COLLERVAETRENOTREMEILLEURAMI!** ===== On réfléchit... ===== Au final il n'y aura que 3 fonctions : * switcher le mode vidéo / photo / photos en série : 180° pendant 3s * commencer une vidéo / prendre une photo / déclencher une série de photos : impulsion servomoteur de 180° * arrêter : impulsion servomoteur de 180° Là où on teste, on s'aperçoit qu'il faudra aussi rajouter une impulsion servomoteur de 0° comme si on relâchait le bouton de commande. Donc en **entrée **nous n'avons besoin que de la **broche numérique** compatible avec des commandes de servomoteur. ===== On prépare ! ===== Dans le dossier '**\blocks\**', il faut créer un dossier avec le nom du projet ou fabricant, un fichier de //texte brut avec le même nom// et toutes les images nécessaires à illustrer les blocs : === -> le nom du dossier est unique et explicite === === -> le nom du dossier est celui du fichier js === === -> le nom de l'image sera le nom de la fonction === === -> pas de majuscules ! === === -> les espaces et accents sont interdits !!! === //→ de préférence tout en Anglais, langue de base en programmation pour ensuite faire des traductions…// //→ ne pas avoir peur des noms longs, il faut que ce soit explicite !// C'est un peu comme les 10 commandements, mais moitié moins…les deux dernières chacun en fait ce qu'il veut mais c'est mieux. {{:fr:arduino:blockly_rduino:creerblocsmultiling:0f0e315da6863fb659a417516d51be85.png}} ===== On complète ! ===== Dans le fichier javascript '**flycamone-eco-v2.js**' il faut décrire le bloc. En regardant la documentation de Google Blockly, ainsi que les blocs existants (//**modifiez un paramètre et regardez ce que ça produit comme changement**//) notamment les servomoteur dans notre cas. /** * Block pour la FlycamOne Eco v2 * @author Seb Canet (canet.s@free.fr) */ 'use strict'; goog.provide('Blockly.Blocks.flycam'); goog.require('Blockly.Blocks'); goog.require('Blockly.Types'); Blockly.Blocks.flycam.HUE = '#46C286'; Blockly.Blocks.flycam_switch = { init: function() { this.setColour(Blockly.Blocks.flycam.HUE); this.setHelpUrl(Blockly.Msg.FLYCAM_SWITCH_HELPURL); this.appendDummyInput("") .appendField(Blockly.Msg.FLYCAM_SWITCH_TEXT) .appendField(new Blockly.FieldImage(Blockly.pathToBlockly + 'blocks/flycamone-eco-v2/flycam_switch.jpg', Blockly.Arduino.imageSize, Blockly.Arduino.imageSize)); this.appendValueInput("PIN") .setCheck('Number') .setAlign(Blockly.ALIGN_RIGHT) .appendField(Blockly.Msg.FLYCAM_SWITCH_INPUT); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(Blockly.Msg.FLYCAM_SWITCH_TOOLTIP); } }; ===== On comprend !!! ===== Décryptons tout ça dans l'ordre : - tout ce qui est entre** /*** jusqu'à ***/** est considéré comme un commentaire, il est toujours bon d'être explicite - la première ligne est nécessaire - ce fichier va donc fournir des blocs de la bibliothèque 'flycam' ou ce que vous voulez, d'où le : goog.**provide** ('Blockly.Blocks.**flycam**'); - mais on a besoin de la bibliothèque des formes définie par Blockly **: **goog.**require** ('Blockly.Blocks'); - on définit la couleur de tous les blocs : Blockly.Blocks.**flycam**.HUE= '#46C286'; - **/!\ ATTENTION /!\** je l'affiche ici pour compréhension : la variable Blockly.Blocks.flycam.HUEva contenir la valeur '#46C286', **mais il faut maintenant la déplacer** dans le fichier **'\blocks\blocks_colors.js'**. Il suffira de l'utiliser par la suite - c'est parti pour le nom du 1er bloc : //Blockly.Blocks.flycam_switch// (**sans espace ni accent, qui porte le nom de la photo qui va avec, etc**) - on ouvre la définition de la fonction : init: function() { - rapido on attribue la couleur de **ce** bloc : **this**.setColour(Blockly.Blocks.**flycam**.HUE); l'intérêt est d'utiliser la variable en n'ayant besoin de lui attribuer une valeur qu'une seule fois - pour que les gens disposent d'une aide au clic droit : this.setHelpUrl(Blockly.Msg.FLYCAM_SWITCH_HELPURL); **/!\ ATTENTION /!\** on n'utilise QUE des variables : la variable Blockly.Msg.FLYCAM_SWITCH_HELPURLva contenir l'adresse du site web, on verra comment le remplir par la suite - on fait une **entrée **standard pour la remplir avec des infos : this.appendDummy**Input** ("")… - …qui contiendra un texte contenu dans une variable: .appendField(Blockly.Msg.FLYCAM_SWITCH_TEXT)… - ..avec ensuite une photo dont les dimensions vont changer à la volée (donc des variablespour la taille !) : .appendField(new Blockly.FieldImage(Blockly.pathToBlockly + 'blocks/flycamone-eco-v2/flycam_switch.jpg', Blockly.Arduino.imageSize, Blockly.Arduino.imageSize)); - nouvelle **entrée **qui s'affichera donc dans le bloc sur une autre ligne, mais cette fois ce n'est pas une entrée pré-remplie mais qui est ouverte à une //valeur extérieur// de type 'Number' et stockée dans la variable 'PIN'(hyper importante celle-là car elle servira au code Arduino !!!) : this.appendValue**Input** ("PIN")… - …on **vérifie **que le bloc rajouté sera un //chiffre // (et non pas un texte, etc) : .set**Check** ('//Number//')… - …et présentée par un court texte contenu dans une variable: .appendField(Blockly.Msg.FLYCAM_SWITCH_INPUT); - on stipule que ce bloc //peut //s'emboîter avec d'autres **avant lui** : this.set**Previous**Statement(//true//, null); - on stipule que ce bloc //peut //s'emboîter avec d'autres **après lui** : this.set**Next**Statement(//true//, null); - on propose au survol de la souris qu'apparaisse un ballon avec de laide contenue dans la variable: this.setTooltip(Blockly.Msg.FLYCAM_SWITCH_TOOLTIP); - on referme tout ça avec des accolades et des points virgules, vous verrez c'est pénible à vérifier mais il faut à tout prix que ce soit équilibré ! Donc il faut bien préparer ses blocs en amont, sinon n'aurait pas su qu'il fallait inventer : * 1 nom de fonction, * 6 variables + 1 imposée (Blockly.Arduino.imageSize) * 1 entrée * 4 textes {{:fr:arduino:blockly_rduino:creerblocsmultiling:blok_def.jpg?nolink&987x585}}