Forum des utilisateurs de Blockly(s)

Blockly@rduino => Nouveaux blocs => Discussion démarrée par: fontaine.jp le novembre 13, 2016, 02:55:39 pm

Titre: Problème création nouveau bloc
Posté par: fontaine.jp le novembre 13, 2016, 02:55:39 pm
Bonjour,
Tout d'abord un grand coup de chapeau pour le travail accompli.
Je voudrais utiliser des boutons poussoirs avec mes élèves et pour faciliter le travail et ne pas utiliser des résistances de tirages,
j'ai voulu créer un bloc qui met une entrée à l'état haut grâce à l'instruction digitalWrite(2,HIGH).
Seulement l'instruction se place au début du setup (avant l'instruction pinMode(2,input)) et donc cela ne fonctionne pas !
Quelqu'un pourrait m'aiguiller, je vous met le code correspondant.

code du bloc :
Blockly.Blocks.in_up = {
  init: function() {
    this.setColour("#00929F");
   this.setHelpUrl("");
   this.appendValueInput("PIN", 'Number')
        .setAlign(Blockly.ALIGN_RIGHT)
        .appendField("Mettre à '1 (état haut)' la broche");
    this.setPreviousStatement(true, null);
    this.setNextStatement(true, null);
    this.setTooltip("");
  }
};

code du generator :
Blockly.Arduino.in_up = function() {
  var dropdown_pin = Blockly.Arduino.valueToCode(this, 'PIN', Blockly.Arduino.ORDER_ATOMIC);
  Blockly.Arduino.setups_['setup_inup' + dropdown_pin ] = 'digitalWrite(' + dropdown_pin + ', HIGH);';
  return "";
};
(http://Capture.PNG)
Merci pour votre aide.
Jean Philippe.
Titre: Re : Problème création nouveau bloc
Posté par: SebCanet le novembre 17, 2016, 01:34:16 am
Bonjour,
cela vient du fait que Blockly génère le code au fur et à mesure qu'il lit les blocs dans l'ordre.
Donc d'abord il positionne les instructions de ton bloc -> digitalWrite dans le setup ; puis il arrive sur le bloc "état logique de la broche numérique" qui inclut pour son test sur le digitalRead le setup pinMode qui va avec. Mais comme ce pinMode est lu après ton bloc, il le place donc après.
J'espère que c'est clair...

Mais pourquoi ne pas inclur ele pinMode dans ton bloc ? Et quelle différence avec le bloc d'origine ?
Et si vraiment tu en veux un en plus, copie colle le et rajoute le dans la liste des blocs à utiliser, non ?

Merci des tests.
Titre: Re : Problème création nouveau bloc
Posté par: fontaine.jp le novembre 23, 2016, 11:38:58 pm
Merci pour la réponse,
Finalement j'ai opté pour un nouveau bloc du type : changer le fonctionnement du pinmode en input_pullup
Si ça intéresse quelqu'un.

code du bloc :
Blockly.Blocks.in_pullup = {
   init: function() {
   this.setColour("#00929F");
   this.setHelpUrl("");
   this.appendValueInput("PIN", 'Number')
        .setCheck('Number')
        .setAlign(Blockly.ALIGN_RIGHT)
        .appendField("valeur de la broche");
    this.setOutput(true, 'Boolean');
    this.setTooltip("");
    }
};

code du generator :
Blockly.Arduino.in_pullup = function() {
  var dropdown_pin = Blockly.Arduino.valueToCode(this, 'PIN', Blockly.Arduino.ORDER_ATOMIC);
  Blockly.Arduino.setups_['setup_input_' + dropdown_pin ] = 'pinMode(' + dropdown_pin + ', INPUT_PULLUP);';
  var code = 'digitalRead(' + dropdown_pin + ')' ;
  return [code, Blockly.Arduino.ORDER_ATOMIC];
};
______________
Jean Philippe.
Titre: Re : Problème création nouveau bloc
Posté par: SebCanet le novembre 26, 2016, 05:42:15 pm
Super ! Merci beaucoup.
Je l'ai intégré, il faut maintenant que je le customise pour ne mettre que des variables et le rendre ainsi traductible.
Maintenant c'est surtout comment le faire comprendre en lisant le texte dessus...
Des propositions ? ::)