Skip to main content

A MyBlock primer (with a side of math)

MyBlocks are the graphical version of subroutines. If you have a section of code you need to use in several places, or even in different programs, it's sometimes easier to "package" this code into a single block that you can just drag and drop into a program as needed. But this can be more than just a simple sequence of blocks: it is essentially a mini-program all its own, with the added ability to pass variables in and out of MyBlocks. In fact, once you've made a MyBlock and saved it, you can use it just like any of the other blocks: it's like you get to extend the language as you go! It saves reinventing code each time you program, and makes the programs much easier to understand and more readable. You can even "nest" MyBlocks, allowing you to build up very complicated blocks from simple building blocks (hmm... a lot like LEGO).

As an example, here's one way to make a MyBlock that does the Modulo math function (if you've never heard of that, don't worry - it's very similar to finding the remainder of a long division problem). First I make a program to do this, but I make it in a special way. I start out and end with "dummy" variables for the inputs and outputs to the math operation I want to build. I named these variables something that made sense to me, but it wasn't neccessary, just a handy memory aid.

Now I'd like to take the important math operations and package them up in a MyBlock, along with the all-important wiring. All I need to do is select all the blocks I want to end up in my new MyBlock, and then click on the "=" button in the toolbar at the top of the screen. That's it! The needed wiring will follow along. I usually think about this as "tearing" or "ripping" a MyBlock from a "wrapper" program.

Immediately a dialog box pops up where I'm shown a preview of what's being put in the MyBlock, and I can add a name and a text description. The name will appear along the bottom of the MyBlock for easy identification both in the Custom pallet (where it will eventually end up) and in the actual program.









A second dialog box in this series allows me to drag and drop small icons onto a "blank" block icon, so I can design the look of the new icon for my block. I just click and drag icons from the pallet on the bottom into the white square, and I can move them around up there as well, allowing me to position more than one for more variety.









When I finish these dialogs, the editor creates the new MyBlock for me, obligingly replacing the blocks I selected in my original program with a copy of my newly-minted MyBlock, all wired in place and ready to go. Any wires that "crossed the boundries" of the MyBlock I creating have been replaced by plugs, so I can now wire values into and out of the MyBlock.

But what if you need to change something now? After all, I never get everything right the first time through. No problem, just double-click on the MyBlock and it obligingly opens up in its own window, where you can view what's there as well as edit it further if you want:
You can add comments, or add entire blocks, rewire things or move them around. About the only thing you can't do is add new wires in or out of the MyBlock: these need to be present at the creation of it (at least I've not yet found a way around this, if it exists).
These MyBlocks are saved for you, and then appear in the "Custom" pallet that Jim previously listed. There are even ways to change where they appear in the Custom pallet, so you can organize them as you see fit. You can also re-edit the icon or description of the MyBlocks later on.

Just to illustrate a slightly more complex MyBlock, here's the view inside a MyBlock that does a simple calculation for any calculator, but one noticably lacking on many small robots: sin(x), where x is an angle in degrees. This MyBlock returns the sin(x) times 1000 (why? Because the NXT uses only integer variables). It uses a version of the block we just created to streamline the calculation right near the beginning, as well as file operations (it reads from a table of values the help with the calculation).
--
Brian Davis

Popular posts from this blog

Celebrating MINDSTORMS with a Remix - Part 3

The ROBOTMAK3RS continued their celebration of the 25th Anniversary of MINDSTORMS through these Fall and Winter remix projects. Each ROBOTMAK3R was tasked with selecting one LEGO set of their choice and combining it with a MINDSTORMS set. Below are the five amazing models they came up with. Braill3 by Jerry Nicholls Braill3 is an EV3-based LEGO Braille bricks reader. This robot uses its fingertip, made from three touch switches, to read messages written using the LEGO Braille bricks and will speak out what it detected. If it sees a simple maths problem it will attempt to solve it and give the answer as well. To learn more about the process of creating this machine, read Jerry's blog . Braill3 can be viewed here . Set Review: The Braille Bricks set is well thought out. The ratios of the letters is suitable for general use and the addition of some punctuation and arithmetic operators is excellent. There is a card showing what bricks there are and their quantities, but no form of sort...

Celebrating MINDSTORMS with a Remix - Part 2

The ROBOTMAK3RS continued their celebration of the 25th Anniversary of MINDSTORMS through these summer and fall remix projects. Each ROBOTMAK3R was tasked with selecting one LEGO set of their choice and combining it with a MINDSTORMS set. Below are the five amazing models they came up with. Remote controlled material handle r by Jozua van Ravenhorst (aka Mr Jo) This remix combines the LEGO Technic Material Handler (42144) with MINDSTORMS EV3 (31313) It uses the power of pneumatic cylinders to move objects around. By using a bluetooth remote control, very precise movements can be made with this model. Touch sensors in the base chassis prevent the turret twisting the cables that go through the turntable to much. The program has several protections to prevent over pressurizing the system for each of the 3 individual pumps and valves that control the 2 booms and claws. The real version of this machine is mostly used in waste material sites to bring the material to machines that sort and...

Celebrating 25 Years of MINDSTORMS

In celebration of the 25th Anniversary of MINDSTORMS, we take a trip through history. Please also visit ROBOTMAK3RS Community every week as we highlight different projects all through 2023 in celebration of the anniversary. Some of the early history is based on the content shared by  Coder Shah  in our  MINDSTORMS EV3 Community Group . Some of the text and links may have been edited from his original posts for consistency and clarity.  1984 - Kjeld Kirk Kristiansen watched a TV program called "Talking Turtle," where MIT professor Seymour Papert demonstrated how children could control robot "turtles" using LOGO, a programming language he developed. 1988 - The collaboration between MIT and LEGO resulted in LEGO TC Logo in 1988, which allowed students to control LEGO models using computer commands. The video shows Papert demonstrating TC Logo. 1990 - LEGO TC Logo was hampered since the robots you built had to be tethered to a personal computer. LEGO and MIT...