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

MINDSTORMS Retires!

2023 is the 25th Anniversary of the MINDSTORMS brand. For 25 years, MINDSTORMS has educated and inspired a generation of robot builders, both children and adults. Unfortunately, the LEGO Group decided to end the line on December 2022. Many ROBOTMAK3RS have been passionately involved with the development of MINDSTORMS through the MUP and MCP programs. Even with the newest Robot Inventor line, several ROBOTMAK3RS were invited to submit additional bonus models that were included in the official app. Regardless of the retirement of a major LEGO robotics product line, ROBOTMAK3RS continue to MAKE-SHARE-INSPIRE using all LEGO robotics platforms available to us. Here is the official statement from LEGO. Since its launch in September 1998, LEGO MINDSTORMS has been one of the core ‘Build & Code’ experiences in the company’s portfolio, carrying with it significant brand equity and becoming a stand-out experience for the early days of consumer robotics and leading to current Build & Code

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

Celebrating MINDSTORMS with a Remix Part 1

In honor of the 25th Anniversary of MINDSTORMS, we asked ROBOTMAK3RS to combine a LEGO set of their choice with a MINDSTORMS set. Here is what these five ROBOTMAK3RS came up with.  MINDSTORMS Chess Assistant by Arvind Seshan Overview: When you are new to chess, it can be a challenge to remember which pieces go where. Now, you can use machine learning and LEGO MINDSTORMS Robot Inventor to build a tool to help you learn where all the chess pieces go on the chess board. Sets used: LEGO® Iconic Chess Set (40174) and MINDSTORMS Robot Inventor (51515) Review: I really like how the chess set base can store all the pieces underneath and that the board neatly splits in half for handy storage. The chess pieces themselves are very sturdy and well built. My only criticism is the building of the box itself. It was quite difficult to see what pieces to use and since the entire box is made mostly of thin plates, it took a lot of time and patience. I would have liked the storage area to be sliding dra