• Welcome to Forum des utilisateurs de Blockly(s). Please login or sign up.
 

création de blocks

Démarré par arcablock, janvier 26, 2018, 07:02:38 pm

« précédent - suivant »

arcablock

Bonjour,
Je me lance de la création de blocs en utilisant le tuto de Seb Canet.
J'utilise un robot de marque Elegoo avec un module de commande moteur L298n.
Ce module existe déjà dans les blocks dans robots/robots_motors.js
L'inconvénient est qu'il faut à chaque fois renseigner le brochage.
En m'inspirant de ce qui est fait dans ce fichier robot_motors j'ai créer un nouveau blocks

j'ai réussi à faire ce block en l'insérant dans robot_motors.js  et le code Arduino est bien le mien mais ce n'est pas très élégant

Fort de cette exprérience je me lance pour créer mon propre block
blocks\robot_elego avec les images et le reste

1 )(ON COMPLETE) j'édite robot_elegoo.js

'use strict';
goog.provide('Blockly.Blocks.robot_elegoo');
goog.require('Blockly.Blocks');
goog.require('Blockly.Types');

Blockly.Blocks.robot_elegoo.HUE = "#5b99a5";

Blockly.Blocks['elegoo_moteur'] = {
  init: function() {
   this.setHelpUrl(Blockly.Msg.ROBOTS_MOTORS_ELEGOOMOTOR_HELPURL);
    this.setColour(Blockly.Blocks.robot_elegoo.HUE);
   this.setInputsInline(false) ;
   this.appendDummyInput()
         .appendField(Blockly.Msg.ROBOTS_MOTORS_ELEGOOMOTOR_S_TITLE )
        .appendField(new Blockly.FieldImage(Blockly.pathToBlockly + 'blocks/robot_elegoo/pilote_moteur.jpg', Blockly.Arduino.imageSize, Blockly.Arduino.imageSize))
        .appendField(
            new Blockly.FieldDropdown([
                  [ Blockly.Msg.ROBOTS_MOTORS_STOP, "stop" ],
                  [ Blockly.Msg.ROBOTS_MOTORS_FORWARD, "forward" ],
                  [ Blockly.Msg.ROBOTS_MOTORS_RIGHT, "right" ],
                  [ Blockly.Msg.ROBOTS_MOTORS_LEFT, "left" ],
                  [ Blockly.Msg.ROBOTS_MOTORS_BACKWARD, "backward" ] ]),
            "DIRECTION");
   this.setInputsInline(false) ;
   this.appendValueInput("SPEEDA")
       .setCheck('Number')
        .setAlign(Blockly.ALIGN_RIGHT)
        .appendField(Blockly.Msg.ROBOTS_MOTORS_SPEEDL);
   this.appendValueInput("SPEEDB")
        .setCheck('Number')
        .setAlign(Blockly.ALIGN_RIGHT)
        .appendField(Blockly.Msg.ROBOTS_MOTORS_SPEEDR);
    this.setPreviousStatement(true, null);
    this.setNextStatement(true, null);
    this.setTooltip(Blockly.Msg.ROBOTS_MOTORS_ELEGOOMOTOR_TOOLTIP);
  }
};

2) j'édite blocks_typing

Blockly.Blocks.elegoo_moteur.getBlockType = function() {
   return Blockly.Types.NUMBER;
};

3 ) (ON PREPARE LE CODE) le code Arduino je l'ai déjà  et il est bon
j'ai juste mis les nouveaux  noms robot_elegoo et elegoo_moteur
'use strict';
goog.provide('Blockly.Arduino.robot_elegoo');
goog.require('Blockly.Arduino');

Blockly.Arduino.elegoo_moteur = function() {
le reste est recopié inchangé

4) (ON LES APPELLE) j'ai ajouté
dans blocks\arduino_resume.js

"blocks/robot_elegoo/robot_elegoo.js",

dans blocks\blocks_typing.js

"blocks/robot_elegoo/blocks_typing.js",

dans generators\arduino_resume.js

"generators/arduino/robot_elegoo.js",

5 ) (IL EN MANQUE)
je vais dans la toolbox_arduino_2.xml

et j'ajoute
<category name="CAT_ROBOT_ELEGOO" colour="#00138b">
         <block type="elegoo_motor_s">
         <value name="SPEEDA">
            <shadow type="math_number">
               <field name="NUM">170</field>
            </shadow>
         </value>
         <value name="SPEEDB">
            <shadow type="math_number">
               <field name="NUM">170</field>
            </shadow>
         </value>
      </block>
         
         <block type="elegoo_moteur">
         <value name="SPEEDA">
            <shadow type="math_number">
               <field name="NUM">175</field>
            </shadow>
         </value>
         <value name="SPEEDB">
            <shadow type="math_number">
               <field name="NUM">175</field>
            </shadow>
         </value>
      </block>
            
   </category>
j'avais laissé l'ancien nom pour faire un copier collé et j'ai oublié de l'affacer


6 ) (COURAGE ON Y EST PRESQUE)
dans lang\blocks\fr.js j'ajoute

Blockly.Msg.CAT_ROBOT_ELEGOO = "Robot Elegoo"; //added janvier 2018

les autres variables sont déjà définies
A MOI LA GLOIRE HELAS NON
je lance blockly
niveau 2 et super j'ai le menu Robot Elegoo
j'ouvre Robot Elegoo et surprise
j'ai 2 blocs
EleegoSens&Moteur qui donne le bon code arduino
un petit carré noir qui donne le bon setup arduino de ma commande moteur

Mes questions :
si des blocks existent suffit-t_il de les recopier dans la toolbox et dans la catégorie adéquate sans rien faire d'autre?

qu'est ce que j'ai bien pu rater pour avoir seulement ce petit carré noir?

j'ai été long mais je tourne en rond,
merci pour votre aide

arcablock

suite de mes investigations
le petit carré noir est bien associé à mon fichier generators/arduino/robot_elegoo.js
car si je change un numéro de broche quand je retourne dans blockly la sélection de ce carré noir donne le bon code du setup arduino

autre point si j'ajoute dans blocks_colors.js la ligne

Blockly.Blocks.robotelegoo.HUE = "#5B99A5";

je n'est plus de blocks du tout quand je clique sur mon menu

arcablock

toujours suite à mes investigations
par exemple je recopie tout mon blocks
Blockly.Blocks.elegoo_moteur = {
  init: function() {
etc
pourquoi pas dans flycamone-eco-v2.js l'exemple de Seb Canet
je ne déclare même pas ce blocks dans blocks_typing.js du répertoire flycamone
grosse surprise mon bloc apparaît dans mon niveau 2 dans Robot Elegoo et il est valide avec le bon code arduino

alors là je ne comprends plus...

alors je change le nom de mon répertoire et la çà marche encore sauf évidemment le logo du dessin

le block n'est déclaré dans aucun fichier blocks_typing.js, mon répertoire n'existe plus
je déplace le block dans l'espace de travail et  il fonctionne je peux modifier les valeurs des vitesses le code arduino est bon
c'est encore plus mystérieux pour moi
help help

SebCanet

Salut,
merci de tous ces efforts  ;D !

Pour répondre à "si des blocks existent suffit-t_il de les recopier dans la toolbox et dans la catégorie adéquate sans rien faire d'autre?" : oui.

Pour les couleurs il y a un défaut de frappe : Blockly.Blocks.robotelegoo.HUE alors que tes blocs font appel à "Blockly.Blocks.robot_elegoo.HUE".

Pour ta question avec le FLyxcamEco, je ne comprends pas ce que tu essayais de faire...

Tout semble bien avancé, poste le zip de tut ton Blockly@rduino qu'on puisse regarder dans le détail.

Merci.

PS : je me suis permis de supprimer ton message en double.

arcablock

bonjour et surtout merci pour cette réponse.
Il y a eu deux messages car le premier coup j'ai eu un message d'erreur sur l'accès au serveur, j'ai recommencé avec un message plus court.
Ce que j'ai essayé de faire en recopiant mon block dans le flycamone-eco-v2.js? tu me donne la réponse, le block peut être écrit n'importe où (même si ce n'est pas à faire). Ainsi je vois que mon block fonctionne bien avec ce que j'ai mis dedans et avec l'aspect voulu et que le code arduino est bon. Aprés ce premier exercice je comprends bien le tuto. A force de faire des éssais, des copier coller, à utiliser les variables des uns et des autres, on arrive à ajouter des erreurs. Je vais tout reprendre de A à Z sur des bases saines. Félicitations aussi à tous ceux qui ont créé des blocks cela permet d'avoir une bonne base pour en créer de nouveaux.

arcablock

Encore merci à SEB,
La réponse m'a fait réfléchir, si mon block apparaît quand il est ailleurs que dans mon répertoire c'est qu'il est juste. Quand il est dans mon répertoire robot_elegoo il apparaît sous la forme d'un petit carré associé au code arduino juste, c'est dons qu'il y un problème d'accès à mon fichier de description du block, eurêka, j'ai écrit robot_eleego.js alors qu'il cherche un fichier robot_elegoo.js

et comme c'est si bien dit dans ce très bon tuto
"et la joie de debugger si comme moi vous faites régulièrement des fautes de frappe, d'oubli de points virgules"
çà me console

toucas

Salut pour les block je bloc aussi .
Jai vue quil y avait un des blocks sur technozone51 "horloges temps reel) et je les  voudrais sur votre version de blockly.
Et dans votre blockly dans autoduino il y a les block encodeur mais je n'arrive pas à m'en servir.

Un grand MERCI pour votre travail

SebCanet

Citation de: arcablock le janvier 28, 2018, 10:24:06 am
Encore merci à SEB,
La réponse m'a fait réfléchir, si mon block apparaît quand il est ailleurs que dans mon répertoire c'est qu'il est juste. Quand il est dans mon répertoire robot_elegoo il apparaît sous la forme d'un petit carré associé au code arduino juste, c'est dons qu'il y un problème d'accès à mon fichier de description du block, eurêka, j'ai écrit robot_eleego.js alors qu'il cherche un fichier robot_elegoo.js

et comme c'est si bien dit dans ce très bon tuto
"et la joie de debugger si comme moi vous faites régulièrement des fautes de frappe, d'oubli de points virgules"
çà me console

As tu vérifié dans la console (appui sur F12) de Firefox ? Elle décrit bien les pb rencontrés par le navigateur.

Ensuite pour fusionner tes rajouts avec l'existant, soit tu sais utiliser Github avec ton compte, soit tu envoies ton Blockly modifié et je m'en occupe.
Merci.

SebCanet

Citation de: toucas le janvier 28, 2018, 10:46:12 am
Salut pour les block je bloc aussi .
Jai vue quil y avait un des blocks sur technozone51 "horloges temps reel) et je les  voudrais sur votre version de blockly.
Et dans votre blockly dans autoduino il y a les block encodeur mais je n'arrive pas à m'en servir.

Un grand MERCI pour votre travail

Salut,
le mieux serait que tu ouvres 2 sujets différents dans le forum.
Pour TechnoZone, on échangeait pas mal avant, mais il a préféré s'arrêter sur une ancienne version de mon Blockly@rduino, sans typage automatique. Depuis je n'ai plus aucune nouvelle... Il faut intégrer ses blocs et les debugger pour rajouter les fonctions supplémentaires que j'ai rajoutées depuis. Ca peut être un très bon point de départ pour apprendre de quoi sont faits les blocs avant de créer les siens ex-nihilo. Merci d'avance  ;)

Pour les blocs autoduino, je ne peux pas t'aider car ce n'est pas moi qui les ai conçus. D'autant plus qu'ils sont à connecter sur un shield particulier. De quel matériel as tu besoin ?

toucas

Salut merci pour la reponse ok donc le matériel ou les block il me manquerai juste "encodeur rotary" et un "RTC en i2c" pour le moment lol