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

Problème création nouveau bloc

Démarré par fontaine.jp, novembre 13, 2016, 02:55:39 pm

« précédent - suivant »

fontaine.jp

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 "";
};

Merci pour votre aide.
Jean Philippe.

SebCanet

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.

fontaine.jp

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.

SebCanet

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 ? ::)