-
• #2
Honestly, without seeing the blockly code you're using its hard to really know what is going on.
Do you have a link to it in GitHub or something?
-
• #3
Hi Gordon!
Thanks for reply.https://github.com/junguksim/project_codubot/blob/master/blockly/blockly_codubot.js
You can watch first block(codubot ready)'s code at first line.
Second block(motor_move)'s code is at line 178.If you want more, please give me reply.
-
• #4
Thanks - I think you need to breakpoint your code eg
Blockly.JavaScript.motor_move_by_angle
and step through it with the chrome devtools.As far as I can tell:
Blockly.JavaScript.motor_move_by_vel = function(block) { let vel = Blockly.JavaScript.valueToCode(this, 'vel', Blockly.JavaScript.ORDER_ASSIGNMENT) || '""'; if(motorValid_ === false) { motor_ = 0; <----------------------- here because motorValid never got set } else { motor_ = block.getFieldValue("turnMotor_") <--- never gets called
My guess is
validate
only ever gets called on user input, and not when the code is loaded.But either way a global
motorValid_
sounds bad - for instance it's just set to the valid state of the last block checked, not to that of all the blocks. Personally I'd removevalidate
and just check what's going on when creating the code inBlockly.JavaScript.*
-
• #5
The reason why I use
validate
is, when I don't choose any value in dropdown, so the default value should be set, but unfortunately it doesn't. The value wasundefined
when I don't select any value in dropdown!if(motorValid_ === false) { motor_ = 0; <----------------------- here because motorValid never got set } else { motor_ = block.getFieldValue("turnMotor_") <--- never gets called
So that
block.getFieldValue("turnMotor_")
line works well, because of validator.I can't think the way that
just check what's going on when creating the code in Blockly.JavaScript.*
.Can you explain with any examples?
-
• #6
I mean, you could just do:
motor_ = block.getFieldValue("turnMotor_"); if (motor_===undefined) motor_=0;
So now you check that value inside
Blockly.JavaScript.motor_move_by_vel
- if it's undefined you set the default value.But what you were doing wouldn't work properly anyway - for instance if you make a bunch of blocks, and just the very last block doesn't have a motor set, all of the blocks will then have the motor set to 0 which I guess isn't what you want
-
• #7
Thank you Gordon!
It works perfectly with your solution.
Hello there.
I'm developing a site which can control an educational robot(by MDBT42Q).
Here's my block code that I want to save and load.
(If you can't see photo, I attached at below.)
It looks simple. First dropdown has two options(LEFT, RIGHT) and LEFT is 0, RIGHT is 1.
Second dropdown has two also, CW is 0 , CCW is 1.
It's a converted javascript code.
If I set 'RIGHT' motor at block code and save my code, and then I load it and convert, the code shows
So the loaded block code shows 'RIGHT' motor set, but actually robot moves 'LEFT' motor.
How can I save block code with right parameters that I set before?
Help me please!
1 Attachment