BlocklyProp Solo is a free, online visual programming environment for the ActivityBot, Propeller FLiP module, and other robots and boards with the Propeller microcontroller.
Looking for your BlocklyProp projects that used to be online?
BlocklyProp has migrated from the original community system that required a login for each user, to BlocklyProp Solo where no login is required. The original BlocklyProp stored users' projects on a remote server, but BlocklyProp Solo stores users' projects on their own local file systems. If you did not download your BlocklyProp SVG files as per the notification posted during the 18 months preceding this transition, you may request a product archive. Email support@parallax.com from the same email address used with your BlocklyProp account.
Read about how to use your archive here [2].
This language reference is for the Activity Board WX, ActivityBot robot, FLiP, WX, and other Propeller boards. For the Scribbler S3, see the Scribbler S3 Robot Block Reference. [3]
Browse by topic or block category using the menu on the left. Or, in the BlockyProp editor, right-click any block and choose "Help" to go right to the block's reference page.
Getting Started with BlocklyProp Solo [4] (For the Activity Board, AB360° Robot, FLiP Try-it Kit) |
|
Getting Started with the Badge WX and BlocklyProp [5] | |
NEED HELP??? If you get stuck, contact Parallax Tech Support: support@parallax.com. The BlocklyProp Solo Launcher and FAQ for Schools [8] may also be of help installing BlocklyProp.
Every time you create a BlocklyProp project, you are prompted to choose a board type. The board type setting changes:
Each set of blocks is custom-fit to work well with the built-in accessory circuits on its particular board. This helps to avoid accidentally misusing the I/O pins connected to a board's accessory circuits.
Can I change my project's board type? — NO! Once you have created a project, you cannot change the board type chosen.
Can I upload a blocks file from one board type into a project for another board type? — MAYBE. If you try to upload a BlocklyProp Project .svg file to a project of a different board type, you will see an error message. You can override the message and proceed, but the operation is still likely to fail unless all of the blocks in the project are 100% identical in functionality between the two board types. It is usually best to view the .svg file as a reference for re-building the project with the correct board type.
Propeller Activity Board WX Guide [9] Propeller Activity Board Guide [10]
These all-purpose boards have almost no built-in accessory circuits.
Propeller FLiP Guide [11] Propeller Project Board USB Guide [12]
Hackable Electronic Badge Guide [14]
"Other" is the catch-all category for boards with a Propeller P8X32A microcontroller module that is not otherwise on the list. There are three major differences in this category:
The System category of blocks generally requires some familiarity with text-based programming and the Propeller P8X32A chip architecture for successful use.
In BlocklyProp, all named constants, variables, arrays, and functions are global, meaning that they can be accessed from any other point in a project at any time. If you'd like to add constants, variables, functions, or arrays to your project, you will need to make up your own names when using these blocks:
define constant [17]
variable set [18]
array Initialize [19]
define function [20]
Following the rules of naming is very important when using these blocks!
You may get a compiler error message when you try to run your project if you happen to use a name that is the same as a C reserved word. The BlocklyProp system attempts to compensate for this by beginning its names with double-underscores, but there are still exceptions that get through and cause trouble.
If you see compile error messages that say something like
"error: 'name' redeclared as different kind of symbol" or
"note: previous declaration of 'name' was here"
...try renaming your variable.
The Propeller chip is a multicore microcontroller - it has eight processor cores inside that can run different pieces of code at the same time, sort of like having eight different brains working on individual tasks for a project.
When creating a Blocklyprop project, the main code you build runs in one processor. The BlocklyProp Functions and Multicore tutorial [21] explains more about how this works.
Throughout the Block Reference, look for this "brain" icon as an indicator that a block launches one or more cores automatically. See each block's reference for details
BlocklyProp is transitioning from the original account-based system at blockly.parallax.com [36] to the secure, no-login BlocklyProp Solo [1] site where users store their projects on their computers. An updated Launcher [37] (replaces Client) is needed for BlocklyProp Solo.
New blocks to support new products with be released on the BlocklyProp Solo site going forward.
Occasionally, we "retire" blocks. Sometimes we integrate a block's functionality into a related one, to reduce the number of blocks. Other times, we may need to replace the code that a set of blocks generate, in a way that is not backward-compatible and so would "break" existing programs. Then, we "retire" the old set when we release the new set.
When a block is deprecated, it will turn orange to alert you that it is time to update that spot in your code with a current block.
For the best experience, Windows and Mac users should update their BlocklyProp Client software to version 0.7.x or higher, but anything in the 0.6.x range will work.
We strive to coordinate our updates to keep all of our tutorials up to date with the very latest changes in BlocklyProp once they are released. However, due to the volume of the tutorials and educator resources, there may be some unavoidable lag time.
For all the gory details, see our BlocklyProp-related GitHub repositories:
BlocklyProp website [47], BlocklyProp server [48], BlocklyProp client [49], Propeller Cloud Compiler [50].
BlocklyProp has migrated from the original community system that required a login for each user, to BlocklyProp Solo [51] where no login is required. The original BlocklyProp stored users' projects on a remote server, but BlocklyProp Solo stores users' projects on their own local file systems.
If you did not download your BlocklyProp SVG files as per the notification posted during the 18 months preceding this transition, you may request a product archive by emailing support@parallax.com from the same email address used with your BlocklyProp account.
You must unzip your BlocklyPropProjects.zip archive before trying to use the files.
The project archive folder contains a number of individual project files, each with an .svge file extension. The archiving utility named each file using the first 30 characters of a project's name and also the project's number.
The archive folder also contains a ExcludedProject.txt file with a list of any projects that could not be exported. These excluded files are either empty or contain very old, unsupported blocks.
The .svge files in your project archive can only be used with BlocklyProp Solo. To use a file:
BlocklyProp Solo [51]
SVGE is for SOLO. Note that archive .svge files only work in BlocklyProp Solo. They differ from the .svg files in that they do not contain the visual block graphics.
Compatible with all Propeller Board types.
The CONTROL blocks in BlocklyProp are used to build the structure of a Blockly program. Use these blocks to repeat, loop, make decisions, build and use functions, and start up new processors.
The add comment block allows you to add a comment or note to your code, or a blank separator to visually separate chunks of code, to help a reader or programmer understand what it does.
The if...do block is for decision-making: if the condition inserted at right is true, the enclosed code in the do section will execute. If the condition is not true, the do section will be skipped over and not executed.
The if...do block is a mutating block, indicated by the gear that can be clicked. It allows the block to include multiple “else” and “else if” conditions. If the first condition is not true, its enclosed code will be skipped and the next else if or else conditions will be evaluated and executed if true, before exiting the outer block.
If...then...elseif vs switch...case. The former is more familiar to many programs, but sometimes the latter is a better fit. See the video at switch...case below. Here's an example:
if...then always resolves the attached condition to true (1) or false (0). Imagine a program that needs to determine which button is pressed on a remote. if...then would be like trying to get information from a person who will only answer yes or no. Imagine "Did you press button 16? No? OK, then did you press button 17? No? Okay, well, did you press Button 18? Really? Okay, I'll keep trying..." You may have to ask a lot of questions until you get a "yes" answer and know which action to take.
switch...case always resolves the attached condition to a number. So, instead, you can simply say "What button did you press?" and then go straight to the correct action without further delay. So if...then is a great fit if you need to evaluate a series of conditions and figure out which one is happening. And switch...case is a great fit when you have a variable or equation determining which action to take from a list of numbered choices.
The conditional repeat block creates a loop that, depending on the option chosen in the menu, repeats forever, __ x times, until __, or while __. With the exception of forever, each of the other options requires a condition to be added that indicates when the loop should end.
The repeat item block creates a loop that repeats a certain number of times, starting with the from__ value and ending with the end__ value. To take larger steps between the start and end values, increase the by__ value.
Caution: If you are using a variable you already created for the repeat item, this block will reset it to be equal to the from__ value and it will keep changing the value of the variable each time it loops.
The switch...case block looks at the value of the item attached at switch, jumps down to its matching case, and executes the code enclosed in that case's do section. Click the gear to add additional case conditions. The break option is selected by default. If it is not selected, the program will continue to execute the code enclosed by the cases below it until it runs into a checked break. If a default is provided, it will execute the code enclosed in the default's do section if none of the other cases match switch's value.
Read about if...do...else if vs switch...case above, and watch the video below.
The break block will exit a loop and proceed to the next block in the program.
The pause block forces the program to halt and wait for a specified amount of time before continuing on to the next block. Provide a number in ms (milliseconds, 1,000 per second) for the amount of time to wait. This can be a number value block or any other block that resolves to a number.
Each instance of this block launches a processor automatically.
The new processor block launches a function into its own processor (cog). There are up to 7 processors available on the Propeller. See the BlocklyProp Function and Multicore tutorial [21] for details. Here are some tips for using the new processor block:
The return block may be placed in an if...do statement inside of a function, to conditionally exit that function early and continue with the rest of the program. A return block is not necessary as the last item enclosed by a define function block.
Compatible with all Propeller board types (except Scribbler Robot)
BlocklyProp has two categories of operators: numbers that work with numerical values, and strings that work with text characters.
Compatible with all Propeller board types (except Scribbler Robot).
The NUMBER operator blocks can accept number value blocks, and any other operation blocks or sensor blocks that provide a numerical value.
The math operation block performs a mathematical operation on the inserted value blocks. Non-integer (fraction or decimal) results will be truncated to an integer. Choose an operation from the drop-down menu:
The math operation block has two terms by default. Click the gear and drag over additional terms as needed. THE LIMIT IS 26 TERMS.
Order of operations
To change the order of operations, nest operation blocks inside each other, and/or use the Parentheses block (below).
The limit block allows you to compare the inserted values, and use the highest or lowest value as chosen in the dropdown menu.
The constrain block prevents a value from being too large or too small before using it. Insert a value or variable item, and then enter the maximum and minimum values for the range you want that value to stay within before it is used.
The de/increment block increases (increment) or decreases (decrement) the variable attached to it by 1.
The random block provides a random number between the first inserted low value and the second inserted high value. The first number must be smaller than the second number. If they are not in that order, the resulting random value may be unexpected, such as a number outside the range specified.
The bitwise block performs a bitwise operation (& AND, | OR, ^ XOR, >> right shift, << left shift) on the two values inserted.
The boolean comparison block performs a boolean comparison between the two inserted values and provides a 1/true or 0/false depending on the option selected (and, or, and not, or not).
The not block performs the selected operation on the value attached and provides the result. The options are:
The parentheses block surrounds the enclosed block(s) with parentheses. Use parentheses to change the order of operations in a series of blocks.
The compare values block compares two inserted values and provides a boolean value, 1 if the equation is true, and 0 if it is false. Choose the type of comparison from the drop-down menu:
The map value block scales and offsets the inserted value from the first defined range to the second defined range. This block does not constrain the value that you've entered. For example, given the ranges as shown in the block above, if the value you enter is -5, it will output -10, because the block is asking the new range to be twice the original range.
The advanced math block performs a trigonometric, exponential, or logarithmic function on the inserted values, and stores the result in a variable. Angles are in integer degrees, not radians. Options are:
Since Blockly is working only with integer math, the block requires you to begin with a multiplier (the first inserted value). Although you could use 1 here, larger numbers make this block more precise.
The inverse trig block performs an inverse trigonometric function. The angles that this block calculates and stores are in integer degrees, not radians. Options are:
Because inverse trigonometry operations usually are done on ratios (one number divided by another, the block requires you to input both the numerator and denominator of the ratio. If you need the inverse trig operation of a single number, use 1 as the denominator (the second number).
Compatible with all Propeller board types (except Scribbler Robot)
Several string operator blocks have older versions that have been depricated, and if your project contains any of these older blocks, they will appear orange in color. While they will still work, it is a good idea to replace those blocks with newer versions and adjust your code accordingly. Most of the depricated blocks were depricated because they treated strings of text as one-referenced entities (One-referencing is where the first character of a string of text would be counted as character number 1. Zero-referencing is where the first character would be counted as character zero). While one-referecing is easier to understand, it wasn't fully compatible with other blocks and code since C is a zero-referenced language. Never versions of those blocks are all zero-referenced.
The string variable set size block is used to increase or decrease the size of the variable that can hold strings of text. By default, string variables are set to hold up to 64 characters. By decreasing the size of your string variables, you can save memory. By increasing the size of your string variables, you can hold longer strings of text.
Use the gear icon to add additional variables to the list, and set the size of each variable accordingly. If you've defined a constant using the constant define block, you can set the size of your variable to that defined constant when you click on the gear icon.
The compare strings block provides a value of 1 if the comparison between two strings is true, and 0 if the comparison is false. The drop-down menu selection determines the type of comparison:
The alphabetical comparisons are only alphabetical if the case matches - a capital “A” sorts differently than a lowercase “a”.
The length of string block provides the number of characters in the string, or variable containing a string, inserted into the block.
The combine strings block combines the first and second string and stores them in the variable selected in the drop-down menu. The block uses a buffer, so it is safe to use this block to add text to the beginning or end of a string already stored in a variable.
The find string location block provides the position of a substring within a larger string. The block gives a number value representing where the starting location of the substring is in the larger string. For example, if you use this block to find the substring “World” in the string “Hello World!”, the block would return 7 because “World” starts at the 7th character in the string.
The get character at position block provides the ASCII character [52] (a number value between 0 and 255) for the character found in the string specified in the drop-down menu at the position set by the number value block.
The set character at position block sets the ASCII character [52] (a number value between 0 and 255) for the character in the string specified in the drop-down menu at the position set by the number value block.
The get part of string block stores the part of the string specified by the first drop-down menu from the start and end positions set by the number value blocks and stores it in the variable specified by the second drop-down menu.
The split string block is used to split up a string separated by the defined character. Can be used more than once to extract multiple string parts.
The trim string block removes extra spaces at the beginning and end of a string of text.
The string empty block is used to test if a string is null or empty.
The create string block is used for making a new string from attached values or text.
Use the gear icon to add additional values such as decimal, hexadecimal, or binary integers, ASCII characters, floating point numbers, or strings of text to the string.
The scan string block is used to look for and extract values or characters from a string. Use the gear icon to add types of values to search for and extract from the string such as decimal, hexadecimal, or binary integers, ASCII characters, or floating point numbers.
The string to number block converts the inserted string from decimal, hexadecimal, or binary format into an integer number, then stores the number in the chosen item.
This block has been deprecated. Its functionality is now in the scan string block.
The number to string block converts the inserted integer value into a string in decimal, hexadecimal, or binary format, and then stores the string in the chosen item.
This block has been deprecated. Its functionality is now in the create string block.
Block availability varies by board type.
Compatible with all Propeller board types (except Scribbler Robot)
The number value block is a value that is usually placed in or attached to other blocks that are expecting a numeric value. Any numeric value can be typed into the block. Non-integers will be truncated to integer values. Any integer value from 232 to 232 -1, which is -2,147,483,648 to 2,147,483,647, can be entered into this block.
Compatible with all Propeller board types (except Scribbler Robot)
The text string block is a string of text that is usually placed in or attached to other blocks that are expecting a string of text. Any text can be typed into the block. Some blocks limit the amount of text they can accept to 128 characters.
(Note: previous versions of this block lacked the quotation marks.)
Compatible with all Propeller board types (except Scribbler Robot)
The character value block provides a numerical value from 32-126 based on the printable ASCII character selected.
Compatible with all Propeller board types (except Scribbler Robot)
The music note block provides the frequency value of the selected note. This block may be used with the AUDIO > Frequency out block.
Compatible with all Propeller board types (except Scribbler Robot)
The binary value block can store an entered binary number (base 2).
Compatible with all Propeller board types (except Scribbler Robot)
The hexadecimal block can store an entered hexadecimal number (base 16).
Compatible with all Propeller board types (except Scribbler Robot)
The true/false block provides a value of 1 (true) or 0 (false) depending on which is selected.
Compatible with all Propeller board types (except Scribbler Robot)
The high/low block provides a value of 1 (high) or 0 (low) depending on which is selected.
Compatible with all Propeller board types (except Scribbler Robot)
The constant define block provides a named constant and gives it a value.
Compatible with all Propeller board types (except Scribbler Robot)
The constant value block returns the value of a named constant.
Compatible with all Propeller board types (except Scribbler Robot)
The color block provides a 24-bit integer representing the color selected. The value provided is derived by the following formula: (Red << 16) | (Green << 8) | (Blue). In a 24-bit number, the left 8 bits represent the amount of red, the middle 8 bits represent the amount of green, and the right 8 bits represent the amount of blue.
Compatible only with the Hackable Electronic Badge board type
The color (Badge) block is used with the Badge set RGB-LED block to specify the RGB-LED color.
Compatible with all Propeller board types (except Scribbler Robot)
The color value from block generates a 24-bit integer representing a color value from the red, green, and blue values (0 to 255) inserted.
Compatible with all Propeller board types (except Scribbler Robot)
The get red/green/blue block provides a value (0 to 255) representing the amount of red, green, or blue in the 24-bit color value inserted.
Compatible with all Propeller board types (except Scribbler Robot)
The compare colors block provides a value from 0 (opposite) to 255 (identical) representing how close two 24-bit colors inserted are.
Compatible with all Propeller board types (except Scribbler Robot)
The system counter block provides the current system counter value at the moment it is asked for. The system counter increases by 1 for every system clock “tick,” and there are 80,000,000 ticks every second on the Propeller Activity Board (PAB) and PAB-WX. When the system counter reaches 4,294,967,295 it resets back to zero.
Compatible with all Propeller board types (except Scribbler Robot)
The array initialize block creates an array variable and define the number of elements in that array. If you forget to use array initialize, the other array blocks will show you a triangle warning symbol as a reminder:
Now, your array variable will be accessible from any other array block that has the same name typed into it, such as the array get element block below.
The array fill block allows you to set multiple elements in your array using a comma-separated list of numbers. All numbers must be integers. Any decimal values will be truncated, and if there are more values typed in than there are elements in the array, it will only fill the available elements. The elements are always filled in order starting with element 0 (zero).
The array get element block provides the value of the specified element. The element to retrieve can be specified with either a number value block or any other block that provides a value, such as a get variable block.
The array set element block sets the element specified by the first inserted block to the value specified by the second inserted block.
The array clear block sets all of the elements in your array to 0 (zero).
Block availability varies by board type.
Compatible with all Propeller board types (except Scribbler Robot)
The set variable block allows you to assign an initial value to a variable. Once that is done, you can use this block to access any variable you have created to use it elsewhere in the program.
The variable named item is a system default. To create a variable:
Now, any time you want to change the value of your variable in the program again, you can use this block and select its name from the item drop-down. Your variable will also be accessible from any other block that has an item drop-down menu, such as the use variable block below.
See the Variable Blocks [43] tutorial for an example activity.
Compatible with all Propeller board types (except Scribbler Robot)
The use variable block provides the value of the variable selected in the drop-down menu when inserted into other blocks. A use variable block will be created and visible in the Variables menu for each unique variable you create in a project.
Compatible with the Activity Board WX and Badge WX only.
These four default variables become available under the Variables menu when the COMMUNICATE > WX Module > Advanced > Advanced WX connect block is placed into the BlocklyProp workspace.
Compatible with the Activity Board WX and Badge WX only.
This default variable becomes available under the Variables menu when the COMMUNICATE > WX Module > Advanced > Advanced WX poll block is placed into the BlocklyProp workspace.
Compatible with the Activity Board WX and Badge WX only.
This default variable block becomes available under the Variables menu when certain COMMUNICATE > WX Module > Advanced blocks for data handling are placed in the BlocklyProp workspace.
Compatible with the Activity Board WX and Badge WX only.
This default variable block become available under the Variables menu when certain COMMUNICATE > WX Module > Advanced blocks that perform data handling are placed in the BlocklyProp workspace.
Compatible with all Propeller board types (except Scribbler Robot)
Functions and Memory: Creating and reusing functions in your main program can save on program memory. However, calling functions with the new processor block sets aside 128 bytes of "stack space" each time - that is a portion of the Propeller microcontroller's memory - used to execute the function. If your function running in a new processor is exceptionally large with many variables and computations, it might exceed this stack space and give unexpected results.
The define function block is used to build a function that can be reused.
Once you have created a function, a run function will be created for it and will appear in the Functions menu.
The run function block runs the code inside of a define function block by the same name. This is may be referred to as "calling a function" or "making a function call." You must first create and name a function with a define function block to generate a run function block.
You can use a run function block in two ways.
For Activity Board, FLiP, and Other board types. Not available for Badge or Scribbler Robot board types. I/O pin availability will vary with board type.
The make PIN block sets the function and state of a Propeller I/O pin.
Select a Propeller I/O pin, 0 to 27*.
Set the function and state with the second drop-down:
The check PIN block reads an I/O pin as an input. It sets the specified pin to an input and returns a 1 if the pin selected is high and returns a 0 (zero) if the pin is low.
The set multiple pins will set the state or direction of a continuous group of pins at the same time.
You must first set a pin's direction to output (OUT) with one block before you set its state to HIGH or LOW with another block. Otherwise, it won't work!
The Binary get pins block reads the input states of a contiguous group of I/O pins. The state of each I/O pin becomes a bit in a binary number, with the highest I/O pin number providing the most significant bit.
You must first each pin's direction to input (0) with one block before you attempt to read the input states with this block. Otherwise, it won't work!
The Binary set pins block sets the state or direction of a contiguous group of I/O pins. Each pin in the group is set by the corresponding bit in the attached binary value block.
You must first set a pin's direction to output (1) with one block before you set its state to HIGH or LOW with another block. Otherwise, it won't work!
Block and I/O pin availability will vary with board type. Use care if accessing I/O pins connected to built-in accessory circuits on your board. Refer to your board's product guide for I/O pin assignment details.
Compatible only with the Hackable Electronic Badge and Badge WX board types
The BADGE DISPLAY blocks work with the black-and-white OLED screen built into the badges. This 128x64 pixel display uses a coordinate grid to define where text, numbers, points, lines, and shapes can be drawn on the screen. The coordinates start at 0 (leftmost column), 0 (top row) and increase to 127 (rightmost column), 63 (bottom row).
WARNING: The BADGE DISPLAY blocks can only be used from your main program. These blocks will not work if used inside function blocks that are then launched with the new processor block.
The Badge display print number block is used to send numbers to the Badge module. Numbers can be displayed as a decimal, hexadecimal, or binary.
The Badge display print text block is used to send text strings to the Badge module.
The Badge display print multiple block can print several terms of different types on a single line. Click the gear icon to drag additional terms into the list, then attach appropriate values to the block. Options are:
Checking the specify digits block adds a fill-in field next to all attached number values.
Floating point number option
BlocklyProp uses integer numbers. The floating point number option allows an integer value to be displayed as a decimal number. Use its drop-down menu to divide the integer by a multiple of 10 to scale and display the number appropriately. The specify digits checkbox activates an additional field by each numeric term.
The Badge display set font block is used to set the size of the text (i.e., small: 5x7, medium: 11x15, large: 17x23).
The Badge display set cursor block moves the cursor to the row and column specified. The display on the The Hackable Electronic Badge and the Badge WX has 128 columns and 64 rows.
The cursor position will be the top left pixel where a subsequent block's text string or number will be printed, or where a shape's origin will be.
The Badge display clear screen block clears the entire screen by setting all pixels to black.
The Badge display rotate block turns the contents of the screen 180°.
The Badge display draw point block sets the pixel defined by the first two value blocks to the color defined by the color block.
The Badge display draw line block draws a line from the first coordinate to the second coordinate in the color defined by the color block.
The Badge display draw rectangle block draws a rectangle from the first coordinate (top left corner of the rectangle) to the second coordinate (bottom right corner of the rectangle) in the color defined by the color block. The "fill" checkbox sets whether the rectangle will be drawn as hollow or filled.
The Badge display draw circle block will draw a circle whose center is set by the first two value blocks, and in the color defined by the color block. The "fill" checkbox sets whether the circle will be drawn as hollow or filled.
The Badge display draw triangle block draws a triangle from the first coordinate to the second coordinate to the third coordinate in the color defined by the color block. The "fill" checkbox sets whether the triangle will be drawn as hollow or filled.
Block availability varies by Badge type.
Using any of the Badge RGB-LED blocks on the Badge WX will cause one processor to be launched automatically (one total, NOT one per block).
Compatible only with the Badge WX board type
The Badge RGB-LED setup block is used to tell the Propeller how many RGB-LEDs are connected to the Badge WX. The Badge WX has 4 RGB-LEDs built in and a pin available to connect more.
Compatible only with the Badge WX board type
The Badge RGB-LED set block is used to specify the color for a specific LED.
Compatible only with the Badge WX board type
The Badge RGB-LED set multiple block is used to specify the color for a range of consecutive LEDs.
Compatible only with the Badge WX board type
The Badge RGB-LED update block is used to update colors of all connected RGB-LEDs.
Compatible only with the Badge WX board type
The Badge LED brightness block sets the brightness of a specified LED.
Compatible only with the Hackable Electronic Badge board type
These Badge set LED blocks are used to turn the specified LED on or off.
Compatible only with the Hackable Electronic Badge board type
The Badge set RGB-LED block sets the specified RGB-LED to a specified color.
Compatible only with the Badge WX board type
The Badge WiFi lock block has two functions, chosen by the drop-down menu:
See the Badge WX Product Guide, under Downloads at the Badge WX product page [54].
Available for Activity Board, FLiP, and Other board types. Not available for Badge or Scribbler Robot board types. I/O pin availability will vary with board type.
The 296 x 128 2.9 inch ePaper Display (#28084) [38] uses a coordinate grid to define where text, numbers, points, lines, and shapes can be drawn on the display module’s screen. The coordinates start at 0 (leftmost column), 0 (top row) and increase to 295 (rightmost column), 127 (bottom row).
The ePaper initialize block is used to set up the Color ePaper display module. The DIN, CLK, CS, D/C, and RES pins on the module must be matched to the Propeller I/O pins they are connected to.
If you have defined a constant using the constant define block, the constant will show up in all of the pin menus and can be selected instead of a numbered pin:
If you forget to use this block in your project, other ePaper blocks will display a triangle warning symbol. Click the triangle, and you will see a reminder message to use the ePaper initialize block at the beginning of your program.
The Display font loader block must be run as its own program, with no other blocks, before any medium or large fonts can be used. When this block is run, it takes about a minute to load all of the fonts onto the EEPROM memory chip on the Propeller Board.
The fonts are stored in EEPROM locations 40576..63400. This same block, using the same EEPROM locations, is also available from the OLED menu.
Because the ePaper library uses an image buffer, the ePaper update block must be used to draw to the ePaper screen. This block sends anything that has been drawn to the buffer to the display since the previous time this block was used.
For example, when you use an ePaper draw rectangle block by itself, noting changes on the ePaper display. If you this block immediately after the ePaper draw rectangle block, the rectangle will appear.
The ePaper max height block returns the vertical value of the bottom row of pixels: 63 when the pins are in a vertical orientation, 95 when the pins are in a horizontal orientation.
The ePaper max width block returns the horizontal value of the rightmost column of pixels: 95 when the pins are in a vertical orientation, 63 when the pins are in a horizontal orientation.
The ePaper command block permits you to choose and execute the command selected from the drop-down menu:
The ePaper font color block is used to set both the color of the font and the background (highlight) color displayed behind the font characters. If the background color is set to the same color as the font color, the background will be made transparent.
The ePaper set text block is used to set the size (small: 5x7, medium: 11x15, large: 17x23) and the font face (sans/console, serif/typewriter, script/handwriting, bubble/cartoon).
The ePaper set cursor block sets the top left pixel position where text starts being written.
The ePaper print text block is used to send text strings to the ePaper module. Nothing will appear on the ePaper display until an ePaper update block is used.
The ePaper print number block is used to send numbers to the ePaper module. Numbers can be displayed as a decimal, hexadecimal, or binary. Nothing will appear on the ePaper display until an ePaper update block is used.
The ePaper print multiple block can print several terms of different types on a single line. Click the gear icon to drag additional terms into the list, then attach appropriate values to the block. Options are:
Checking the Specify Digits block adds a fill-in field next to all attached number values.
Floating point number option
BlocklyProp uses integer numbers. The floating point number option allows an integer value to be displayed as a decimal number. Use its drop-down menu to divide the integer by a multiple of 10 to scale and display the number appropriately. The specify digits checkbox activates an additional field by each numeric term.
Nothing will appear on the ePaper display until an ePaper update block is used.
The ePaper draw pixel block sets the pixel defined by the first two value blocks to the color defined by the color block. Nothing will appear on the ePaper display until an ePaper update block is used.
The ePaper draw line block draws a line from the first coordinate to the second coordinate in the color defined by the color block. Nothing will appear on the ePaper display until an ePaper update block is used.
The ePaper draw triangle block draws a triangle from the first coordinate to the second coordinate to the third coordinate in the color defined by the color block. The “fill” checkbox sets whether the triangle will be drawn as hollow or filled. Nothing will appear on the ePaper display until an ePaper update block is used.
The ePaper draw rectangle block draws a rectangle from the first coordinate (top left corner of the rectangle) to the second coordinate (bottom right corner of the rectangle) in the color defined by the color block. The “roundness” value, if set to something other than zero, will round the corners by the amount specified (radius of the roundness). The “fill” checkbox sets whether the rectangle will be drawn as hollow or filled. Nothing will appear on the ePaper display until an ePaper update block is used.
The ePaper draw circle block will draw a circle whose center is set by the first two value blocks, and in the color defined by the color block. The “fill” checkbox sets whether the circle will be drawn as hollow or filled. Nothing will appear on the ePaper display until an ePaper update block is used.
Displaying bitmap images from an SD card is SLOW! It will take approximately 45 seconds to draw a bitmap that fills the screen to the ePaper module. While it is drawing, it will look like nothing is happening.
You can use ePaper Bitmap blocks in the same program as play WAV file blocks. However, block order matters. The ePaper Bitmap block lets go of the SD card file access automatically after fetching the image to be displayed. However, the WAV play [55] block does not. Use the WAV stop [55] block before trying to use an ePaper Bitmap block, or just draw the image before starting the WAV player.
The ePaper Bitmap block will draw a bitmap (BMP file format) saved on an SD card attached to the Propeller microcontroller. When using the board type for the Activity Board and Activity Board WX, which have built-in microSD card slots, the SD card is automatically initialized when this block is called. When using the FLiP or other board types, you will need to use the SD initialize [56] block at the beginning of your program.
The bitmap/BMP file must have the following requirements met:
The following online file converter https://image.online-convert.com [57]is able to create BMP files from nearly any kind of image. This online tool can also be used to resize the image to ensure that it will render properly.
On the ePaper display, the image will be drawn as black and white. If the original file was in color, the average luminosity of the pixel will be used to determine if that pixel is drawn as black or white. One way to make a color or greyscale image to appear well on a black and white display is to use a dithering tool. One is available online here (note that it does not produce BMP images, so its output will have to be converted): https://29a.ch/ditherlicious [58].
Nothing will appear on the ePaper display until an ePaper update block is used.
For Propeller Activity Board WX (via USB connection only), Hackable Electronic Badge, FLiP, and Other board types.
The GRAPH blocks are used to generate a visual graph of data in BlocklyProp's Graphing window. This window will open automatically when you run a project that uses these blocks.
Do not try to use Graph and Terminal blocks in the same project. The Terminal takes charge and will prevent the Graphing window from opening. You would, however, see some data values appear in the Terminal window.
Do not use the Graph blocks in a function that will be launched with the New Processor block. It won't work - the Graph needs to be used from your project's main processor.
Use the Graph initialize block at the beginning of your project to set the display area for the data that your project will graph.
The Graph value block sends the attached value to the graph display. Click the gear to display additional values from the same block; you will be able to label each value. Each value plotted is a different color, with a matching label and numerical data displayed in a box in the Graphing window's upper right corner.
Available for Activity Board, FLiP, and Other board types. Not available for Badge or Scribbler Robot board types. I/O pin availability will vary with board type.
The 96 x 64 Color OLED display module (#28087) [60] uses a coordinate grid to define where text, numbers, points, lines, and shapes can be drawn on the display module’s screen. The coordinates start at 0 (leftmost column), 0 (top row) and increase to 95 (rightmost column), 63 (bottom row).
See the OLED Display with BlocklyProp tutoria [61]l to get started.
WARNING! The OLED blocks can only be used from your main program. These blocks will not work if used inside function blocks that are then launched with the new processor block.
The OLED initialize block is used to set up the Color OLED display module. The DIN, CLK, CS, D/C, and RES pins on the module must be matched to the Propeller I/O pins they connect to.
If you have defined a constant using the constant define block, the constant will show up in all of the pin menus and can be selected instead of a numbered pin:
If you forget to use this block in your project, other OLED blocks will display a triangle warning symbol. Click the triangle, and you will see a reminder message to use the OLED initialize block at the beginning of your program.
The Display font loader block must be run as its own program, with no other blocks, before any medium or large fonts can be used. When this block is run, it takes about a minute to load all of the fonts onto the EEPROM memory chip on the Propeller Board.
The fonts are stored in EEPROM locations 40576..63400. This same block, using the same EEPROM locations, is also available from the ePaper menu.
The OLED max height block returns the vertical value of the bottom row of pixels: 63 when the pins are in a vertical orientation, 95 when the pins are in a horizontal orientation.
The OLED max width block returns the horizontal value of the rightmost column of pixels: 95 when the pins are in a vertical orientation, 63 when the pins are in a horizontal orientation.
The OLED command block permits you to choose and execute the command selected from the drop-down menu:
The OLED font color block is used to set both the color of the font and the background (highlight) color displayed behind the font characters. If the background color is set to the same color as the font color, the background will be made transparent.
The OLED set text block is used to set the size (small: 5x7, medium: 11x15, large: 17x23) and the font face (sans/console, serif/typewriter, script/handwriting, bubble/cartoon).
The OLED set cursor block sets the top left pixel position where the text is to begin next.
The OLED print text block is used to send text strings to the OLED module.
The OLED print number block is used to send numbers to the OLED module. Numbers can be displayed as a decimal, hexadecimal, or binary.
The OLED print multiple block can print several terms of different types on a single line. Click the gear icon to drag additional terms into the list, then attach appropriate values to the block. Options are:
Checking the Specify Digits block adds a fill-in field next to all attached number values.
Floating point number option
BlocklyProp uses integer numbers. The floating point number option allows an integer value to be displayed as a decimal number. Use its drop-down menu to divide the integer by a multiple of 10 to scale and display the number appropriately. The specify digits checkbox activates an additional field by each numeric term.
The OLED draw pixel block sets the pixel defined by the first two value blocks to the color defined by the color block.
The OLED draw line block draws a line from the first coordinate to the second coordinate in the color defined by the color block.
The OLED draw triangle block draws a triangle from the first coordinate to the second coordinate to the third coordinate in the color defined by the color block. The “fill” checkbox sets whether the triangle is drawn as hollow or filled.
The OLED draw rectangle block draws a rectangle from the first coordinate (top left corner of the rectangle) to the second coordinate (bottom right corner of the rectangle) in the color defined by the color block. The “roundness” value, if set to something other than zero, will round the corners by the amount specified (radius of the roundness). The “fill” checkbox sets whether the rectangle will be drawn as hollow or filled.
The OLED draw circle block will draw a circle whose center is set by the first two value blocks, and in the color defined by the color block. The “fill” checkbox sets whether the circle will be drawn as hollow or filled.
Displaying bitmap images from an SD card is SLOW! It will take approximately 20 seconds to draw a bitmap that fills the screen to the OLED module. Keep this in mind when designing your programs.
You can use OLED Bitmap blocks in the same program as WAV play [55] blocks. However, block order matters. The OLED Bitmap block lets go of the SD card file access automatically after fetching the image to be displayed. However, the WAV play [55] block does not. Use the WAV stop [55] block before trying to use an OLED Bitmap block, or just draw the image before starting the WAV player.
The OLED Bitmap block will draw a bitmap (BMP file format) saved on an SD card attached to the Propeller microcontroller. When using the board type for the Activity Board and Activity Board WX, which have built-in microSD card slots, the SD card is automatically initialized when this block is called. When using the FLiP or other board types, you will need to use the SD initialize [56] block at the beginning of your program.
The bitmap/BMP files meet the following requirements:
The online file converter https://image.online-convert.com [57]can create BMP files from nearly any kind of image. This online tool can also be used to resize the image to ensure that it will render correctly.
For Activity Board, FLiP, and Other board types. Not available for Badge or Scribbler Robot board types.
The PROTOCOLS blocks simplify communication between the Propeller microcontroller and other electronic devices that use a standardized method of communication.
I/O pin availability will vary with board type. Use care if accessing I/O pins connected to built-in accessory circuits on your board. Refer to your board's product guide for I/O pin assignment details.
This block launches a processor automatically, one processor per block.
The serial initialize block sets up a serial connection. If you forget to use this block, other serial blocks will remind you with a triangle-shaped warning icon:
You may set up more than one serial connection by using a separate Serial initialize block for each. If you set up more than one serial initialize block in a project, a drop-down menu will appear on the serial transmit and serial receive blocks to select the target serial connection's Propeller I/O pin.
For each instance:
The serial transmit block sends the value in the inserted block, converted to a zero-terminated text string. Pre-format the value into one of the following forms with the drop-down menu:
If using more than one serial initialize block, select the Propeller I/O pin for the target serial connection in the dropdown that will appear.
Note that the original blocks serial transmit text and serial transmit number have been deprecated.
The serial receive block collects a string of characters until it receives a terminating zero. The characters are then decoded into the type of value chosen in the drop-down menu, and that value is stored in the specified variable item.
If using more than one serial initialize block, select the Propeller I/O pin for the target serial connection in the dropdown that will appear.
Note that the original blocks serial receive text and serial receive number have been deprecated.
The Serial send multiple block is used to send attached values or text to the device connected to the specified pin.
The Serial receive multiple block is used to receive numbers or characters from the specified pin and store them in the specified variables.
The Serial status block returns true (1), false (0), or a character depending on the status of the serial connection and the type of status required.
The shift in block receives a value sent to the Propeller serially. The DATA and CLK pins must be matched to the pins that are connected to the device sending the serial information. The shift in block will receive the number of bits specified by the first drop-down menu, in the order specified by the second drop-down menu (MSB: Most significant bit first or LSB: Least significant bit first), and manner specified by the third drop-down menu: read the DATA pin before the clock, or read the DATA pin after the clock.
If you have defined a constant using the constant define block, the constant will show up in all of the pin menus and can be selected instead of a numbered pin:
The shift out block sends a value serially. The DATA and CLK pins must be matched to the pins that are connected to the device receiving the serial information. The shift out block will send the number of bits specified by the first drop-down menu, in the order specified by the second drop-down menu (MSB: Most significant bit first or LSB: Least significant bit first).
If you have defined a constant using the constant define block, the constant will show up in all of the pin menus and can be selected instead of a numbered pin:
For Activity Board, FLiP, and Other board types. Not available for Badge or Scribbler Robot board types.
BlocklyProp supports just one RGB-LED Init block per project, so if you want to use multiple RGB LEDs, chain them together instead of wiring them to separate Propeller I/O pins. These blocks are intended for WS2812B RGB LED modules (Parallax #28025 [62]& 28026 [63]).
This block launches a processor automatically, one per block instance.
The RGB-LED init block is used to specify the Propeller I/O pin connected to the RGB LED module(s), and to also specify the number of LEDs chained together. If you forget to use this block, other RGB-LED blocks will remind you with a triangle-shaped warning icon:
If you use more than one RGB-LED init block in a project, the RGB-LED set and RBG-LED update blocks will provide a dropdown for selecting the targeted Propeller I/O pin for a given set of RGB-LEDs.
The RGB-LED set block allows you to choose a color for a specific RGB LED.
Use a new block to set the color for each RGB LED in the chain. The settings will not take effect until the program execution reaches an RGB-LED update block.
*Keep in mind that with WS2812B LEDs, brightness and current draw will vary by color, with white being the brightest and most power-consuming setting.
The RGB-LED set block allows you to choose a color for a specific contiguous range of RGB LEDs chained together.
Use a new block to set the color for each RGB LED in the chain. The settings will not take effect until the program execution reaches an RGB-LED update block.
*Keep in mind that with WS2812B LEDs, brightness and current draw will vary by color, with white being the brightest and most power-consuming setting.
The RGB-LED update block updates all of the RGB LED colors to the settings specified in the most recent RGB-LED set blocks. Each time the colors are changed with RGB-LED set blocks, the RGB-LED update block must be used again to see the new colors.
If you use more than one RGB-LED init block in a project, the RBG-LED update blocks will provide a dropdown for selecting the targeted Propeller I/O pin for a given set of RGB-LEDs.
For Activity Board, FLiP, and Other board types. Not available for Badge or Scribbler Robot board types. I/O pin availability will vary with board type. Use care if accessing I/O pins connected to built-in accessory circuits on your board. Refer to your board's product guide for I/O pin assignment details.
The SERIAL LCD blocks are used to set up and send information to be displayed (or played) on Parallax 2x16 (#27976 [64] & #27977 [65]) and 4x20 (#27979 [66]) character LCD modules.
This block launches a processor automatically. Use only instance of this block per project.
The LCD initialize block is used to set up a connection to a Parallax Serial LCD module. If you forget to use this block, other LCD blocks will remind you with a triangle-shaped warning icon:
If you have defined a constant using the constant define block, the constant will show up in all of the pin menus and can be selected instead of a numbered pin:
The module can be plugged into the breadboard on the Propeller Activity Board or Propeller Activity Board WX, and the +5VDC, GND, and RX wires can be connected as shown:
The LCD print text block sends the inserted text string to the serial LCD module.
The LCD print number block sends the inserted number value to the serial LCD module. Use the dropdown menu to choose how to display the value, as a decimal, hexadecimal, or binary number.
The LCD print multiple block can print several terms of different types on a single line. Click the gear icon to drag additional terms into the list, then attach appropriate values to the block. Options are:
Checking the Specify Digits block adds a fill-in field next to all attached number values.
Floating point number option
BlocklyProp uses integer numbers. The floating point number option allows an integer value to be displayed as a decimal number. Use its drop-down menu to divide the integer by a multiple of 10 to scale and display the number appropriately. The Specify Digits checkbox activates an additional field by each numeric term.
The LCD command block is used to issue specific commands to the LCD module. Select an option from the dropdown menu:
The LCD set cursor block sets the position of the cursor on the LCD screen. It can be used to print text or numbers at any location on the screen.
The LCD play note block is used to make the Parallax LCD module play a musical note from its onboard piezo speaker.
Available for all board types via a USB connection. Not currently available over WiFi with the Activity Board WX or Badge WX.
The TERMINAL blocks are used for displaying text on your computer screen, using BlocklyProp's built-in Terminal. The Terminal will open automatically when you run a project that uses these blocks.
Do not try to use Terminal and Graph blocks in the same project. The Terminal takes charge and will prevent the Graphing window from opening. You may, however, see some data values appear in the Terminal window.
Do not use the Graph blocks in a function that will be launched with the New Processor block. It won't work - the Graph needs to be used from your project's main processor.
The Terminal print text block is used to send text to the Terminal window. When checked, the "then a new line” checkbox adds a carriage return to the end of the text that was sent, moving the cursor to the beginning of the next line in the Terminal. (Note: earlier versions of this block omitted the quotation marks around the text string.)
The Terminal print number block sends the inserted value to the Terminal window. Set the drop-down menu to display the number as a decimal, hexadecimal, or binary. The “then a new line” checkbox, when checked, adds a carriage return to the end of the number that was sent, moving the cursor to the beginning of the next line in the Terminal.
The Terminal print multiple block can print several terms of different types on a single line. When checked, the "then a new line” checkbox adds a carriage return to the end of the text that was sent, moving the cursor to the beginning of the next line in the Terminal.
Click the gear icon to drag additional terms into the list. Checking the "specify digits" box adds an optional field to all numeric values. Then attach appropriate values to the block, and optionally specify how many digits to display for each numerical value. Options are:
BlocklyProp uses integer numbers. The floating point number option allows an integer value to be displayed as a decimal number. Use its drop-down menu to divide the integer by a multiple of 10 to scale and display the number appropriately.
The Terminal receive text block stores any characters typed into the Terminal into the variable item chosen in the drop-down menu. The characters entered, even if they are numbers, are stored as a string. This block will continue to collect up to 128 characters until the user presses the enter key (sends a carriage return character). Program execution will pause until the carriage return character is received.
The Terminal receive number block stores numerical characters typed into the Terminal into the variable item chosen in the drop-down. The number entered is stored as an integer. This block will continue to collect numerical characters until the user presses the enter key (sends a carriage return character). Program execution will pause until the carriage return character is received.
The Terminal new line block sends a single carriage return character to the Terminal, moving the cursor to the beginning of the next line.
The Terminal clear screen block sends a special character to the screen, which causes the Terminal to clear and reset the cursor to the top left (0,0) position.
The Terminal set cursor block positions the cursor in the window.
The Terminal close block closes the Simple Terminal object so that pins 30 and 31 can be used for other purposes such as a full-duplex serial connection.
UNDER CONSTRUCTION! BlocklyProp reference for using Parallax WX ESP8266 WiFi Module communication blocks.
Compatible with the Activity Board WX, FLiP, Badge WX, and Other board types only.
This module comes in two form factors:
UNDER CONSTRUCTION!! These blocks are under development and not yet available on our production Blocklyprop tool.
BlocklyProp block reference for Simple WX blocks. Use these with the Parallax ESP8266 WX WiFi Module
Compatible with the Activity Board WX, FLiP, Badge WX, and Other board types only.
Use these with Parallax products containing an ESP8266 WX WiFi Module.
Compatible with the Activity Board WX, FLiP, Badge WX, and Other board types.
The Simple WX blocks and Advanced WX blocks are NOT compatible with each other!
A program that contains Advanced WX blocks cannot contain any Simple WX blocks, and a program that contains Simple WX blocks cannot contain any Advanced WX blocks.
This block launches one processor automatically.
The Advanced WX initialize block is required when using other WX advanced blocks on any board or device except the Badge WX.
Use the mode drop-down menu to determine where the Terminal output should be routed through (this is for any blocks using Terminal or Graphing). Text sent between the computer and your board/device can be routed through the USB cable or, in future BlocklyProp versions, the WX module:
Use the DI (Data In) menu to select to which pin the DI pin of the WX module is connected. If you select a pin other than the WX socket, then a second DO (Data Out) menu will appear for you to define that pin connection as well.
The Advanced WX connect block instructs the WX module to listen for incoming HTTP, WebSocket, or TCP data.
The WX module can listen for data from up to four sources. Therefore, this block can be used up to four times.
When it establishes a connection, the program stores the ID for this connection in the variable specified by the store ID in menu.
For each type of connection, you must specify a path as a string of text for the module to connect. For example, to connect to a web service via HTTP, you could use "http://blockly.parallax.com/blockly/ping" or the URL for your specific web service.
HTTP and WebSocket connections default to port 80. For TCP connections, an additional input will appear. You must specify this port as a number.
The Advanced WX poll block instructs the WX module to check the connections set up by the Advanced WX connection block for any incoming data. If any data is received, then a character code for the event type is stored in the variable specified by the first drop-down:
The ID of the connection corresponding to the event code will be stored in the variable specified by the second drop-down menu.
A handle that can be used to retrieve any data from this poll will be stored as a number in the variable specified by the third drop-down menu.
The Advanced WX print block can print several terms of different types to the WX module.
First, specify whether the information will be sent:
Next, specify the connection handle, retrieved by the Advanced WX poll, where you want the string of text sent.
Click the gear icon to drag additional terms into the list. Options are:
This block works similarly to the Terminal print multiple shown in this video:
BlocklyProp uses integer numbers. The floating point number option allows a program to display an integer value as a decimal number. Use its drop-down menu to divide the integer by a multiple of 10 to scale and display the number appropriately, as shown in the video below using the Terminal print multiple block.
The Advanced WX send block sends the attached string of text to a TCP connection specified by the handle provided.
The handle is one of the values retrieved by the Advanced WX poll block.
The Advanced WX scan multiple block scans the received string and stores the data extracted from the string as specified.
First, specify where the information has been retrieved from:
Next, specify the connection handle, retrieved by the Advanced WX poll, where the string of text should be sent.
Click the gear icon to drag additional terms into the list. Options are:
For POST requests, the name in the name/value pair should be specified in the "string starts with txt" parameter.
The Advanced WX scan string stores an incoming string in the specified variable.
First, specify whether information has been retrieved from:
Next, specify the connection handle, retrieved by the Advanced WX poll, where the string of text should be sent.
Lastly, specify the variable in which to store the string.
If you are retrieving data from a TCP connection, you must store the string in the variable set at the WX buffer by the Advanced WX buffer block.
String variables only store up to 64 characters by default. Use the Advanced WX buffer block (for TCP connections), or the String variable set size in the OPERATORS > STRINGS menu if you need to store a longer string.
The Advanced WX receive block receives and stores an HTTP response header or data from a TCP or WebSocket connection.
First, specify the string variable in which to store the received string.
String variables only store up to 64 characters by default. Use the String variable set size in the OPERATORS > STRINGS menu if you need to store a longer string.
Next, specify the variable where the length of the received string will be stored.
Then, specify an active connection handle, retrieved by the Advanced WX poll.
Lastly, make sure that the maximum bytes retrieved is long enough for the incoming string.
The Advanced WX mode block sets or gets the current mode of the WX module.
The Advanced WX code block provides the value for one of the codes used by the WX module.
The Advanced WX buffer block is used to set a receiving buffer. If you are not receiving all of the characters from an incoming stream of data, then you may need to increase the size of this buffer.
Use only as much buffer space as you need. There is a limited amount of memory available on the Propeller, and issues such as program lockup may occur when string buffers use more memory than is available.
The Advanced WX join network block allows you to join a WiFi network by specifying its SSID and that network's passphrase.
The Advanced WX disconnect block disconnects the WX module from the specified connection.
The Advanced WX IP address block provides the IP address of the specified mode as a string. Because the WX module can be both a station and an access point, it may have separate IP addresses for each.
For Activity Board, FLiP, and Other board types. Not available for Badge or Scribbler Robot board types. I/O pin availability will vary with board type.
These blocks work with XBee 802.15.4 (series 1) RF modules [69]. For any XBee model, you may also use the Serial Initialize, Serial transmit, and Serial receive [70] blocks for direct asynchronous serial communication.
This block launches a processor automatically.
The XBee initialize block sets up a serial connection to an XBee module.
* These drop-down options go from 0 to 27 but do not set higher than 17 with the Propeller Activity Board WX, as P18-P31 are already connected to other built-in circuits on this board. Use jumper wires to connect DO and DI sockets on the header in the middle of the board to I/O pin sockets alongside the breadboard.
If you have defined a constant using the constant define block, the constant will show up in all of the pin menus and can be selected instead of a numbered pin:
The XBee transmit block sends a number (as an ASCII string in decimal format), a string, or a single byte depending on the option chosen using the drop-down menu.
The XBee receive block receives a number (as an ASCII string in decimal format), a string, or a single byte depending on the option chosen using the first drop-down menu and stores it in the variable selected in the second drop-down menu.
The Xbee send multiple block is used to send attached values or text to the Xbee module.
The Xbee receive multiple block is used to receive numbers or characters from the Xbee module and store them in the specified variable.
Block and I/O pin availability will vary with board type for each sensor. Use care if accessing I/O pins connected to built-in accessory circuits on your board. Refer to your board's product guide for I/O pin assignment details.
Only for Propeller Activity Board WX board type.
These blocks are for Parallax's 2-Axis Joystick (#27800) [71] used only with the A/D converter built into the Propeller Activity Board (original or WX).
New to this sensor? Click here to see an example schematic and quick Blockly program [72] to help you get started.
The Joystick x-axis block returns the horizontal position of the joystick, which can range from 0 to 100.
Connect the Joystick's L/R (x-axis) pin to a numbered A/D socket on the Propeller Activity Board WX, and then set the A/D drop-down to that socket's number (0-3).
The Joystick y-axis block returns the vertical position of the joystick, which can range from 0 to 100.
Connect the Joystick's U/D (y-axis) pin to a numbered A/D socket on the Propeller Activity Board WX, and then set the A/D dropdown to that socket's number (0-3).
The Parallax 2-Axis Joystick can be used for a wide variety of projects like wheeled robots, video games, or anything requiring user input. The Propeller Activity Board's A/D converter reads the joystick's output on each axis.
Using the connections shown in the wiring diagram above, this program will show you Joystick Up/Down and Left/Right position values (0-99) in the Terminal.
For Propeller Activity Board WX, FLiP and Other board types. Not available for Badge or Scribbler Robot board types.
These blocks are specifically for the 4 x 4 Matrix Membrane Keypad (#27899) [73] sold by Parallax.
New to this sensor? Click here to see an example schematic and quick Blockly program [74] to help you get started.
The 4x4 Keypad Initialize block defines the connections between the Keypad's ribbon cable and the Propeller microcontroller's I/O pins. I/O pin availability will vary by board type.
If you have defined a constant using the constant define block, the constant will show up in all of the pin menus and can be selected instead of a numbered pin:
If you forget to use this block in your program, a triangle warning icon will appear on other 4 x 4 keypad blocks as a reminder.
With the keypad facing you, start matching from the leftmost pin to the rightmost pin. The four rightmost pins MUST be connected to pull-down resistors; use 1 k-ohm to 100 k-ohm resistors for this.
The 4x4 Keypad read block provides a number value for the key pressed.
This example is specifically for the 4 x 4 Matrix Membrane Keypad (#27899) [73] sold by Parallax.
Using the connections shown in the wiring diagram above, this program will show you the number of the key you are pressing on the keypad, in the Terminal, updating once per half-second.
The numbers you see should be very stable. If they fluctuate quickly, or if you notice numbers showing up that you did not press, double-check that you have 1 kOhm (or higher) resistors from pins P7-P4 going to ground and that they're firmly in the correct breadboard row and ground holes. See connection image, above.
Available for Propeller Activity Board, FLiP, and Other board types. Not available for Badge or Scribbler Robot board types. I/O pin range options will vary with board type.
These blocks use a BME680 Environmental Sensor Module (#28061) [41]
The Air Quality initialize block sets up the BME680 sensor. If you forget to use this block, other Air Quality sensor blocks will remind you with a triangle-shaped warning icon:
From the drop-down menus, select the Propeller I/O pin numbers that are connected to the sensor module's SCK, SDI, SDO, and CS pins.
The Air Quality read block instructs the BME680 sensor to take a set of measurements and store them. This block should be used immediately before using an Air Quality get value block.
The Air Quality get value retrieves the specified sensor reading from the last time the Air Quality read block was used.
The Air Quality heater is used to enable or disable the internal heating element inside the BME680 sensor.
Compatible only with Badge board types.
The Badge accelerometer get block returns acceleration and tilt on one of 3 axes (AX, Ay, or AZ) in centigravity units (cg) which is 100ths of 1 gravity (1 g).
The Badge accelerometer shaken block checks to see if the accelerometer was shaken within the last half second.
Block availability varies by Badge type.
Compatible only with the Hackable Electronic Badge board type
The Badge button touchpad block returns the state of the specified rocker or touchpad button - (1) pressed, (0) not pressed.
Compatible only with the Badge WX board type
The Badge button block returns the state of the specified rocker or touchpad button - (1) pressed, (0) not pressed.
Compatible only with the Badge WX board type
The Badge touch sensitivity block sets the sensitivity of the touchpads (A & B) on the badge.
Available for Activity Board, FLiP, and Other board types. Not available for Badge or Scribbler Robot board types. I/O pin range options will vary with board type.
These blocks use a ColorPal Color Sensor (#28380) [75]
New to this sensor? Click here to see an example schematic and quick Blockly program [76] to help you get started.
This block launches a processor automatically, one per block instance.
The ColorPal initialize block sets up the ColorPal sensor. If you forget to use this block, other LCD blocks will remind you with a triangle-shaped warning icon:
From the PIN dropdown, select the Propeller I/O pin number that is connected to the ColorPal module's signal pin.
If you use more than one ColorPal initialize block in a project, the other ColorPal blocks will provide a drop-down to select the Propeller I/O pin for your target ColorPal module.
The ColorPal raw colors block measures the amount of red, green, and blue it detects. Each of those three raw values is stored in the corresponding variable selected in each drop-down menu. The raw values can range from 0 to 4095. The raw values are not white-balanced, but when used correctly, they can be more accurate than the value provided by the ColorPal get color block.
The ColorPal get color block takes a measurement and provides a single, approximate white-balanced, 24-bit color value that is stored in the variable selected in the drop-down. That variable can then be used with other color value blocks [77].
For sensing color, the ColorPAL uses its LED to illuminate a sample, one color component at a time, along with a broad-spectrum light-to-voltage converter to measure the light reflected back. The amount of light reflected from the sample under illumination from each red, green, and blue LED can be used to determine the sample’s color.
If using a Propeller Activity Board, the ColorPal can be connected to either the breadboard or via a 3-wire extension cable to one of the servo headers P12-P17.
Using the connections shown in the wiring diagram above, this example will display the RGB values detected by the ColorPal in the Terminal. Try holding differently-colored objects up to the sensor to see their RGB values.
These blocks are for use with the Fingerprint Scanner (#29126) [78] and the Propeller Activity Board WX, Propeller FLiP or Other board types. Not available for Badge or Scribbler Robot board types.
New to this sensor? Click here to see an example schematic and quick Blockly program [79] to help you get started.
This block launches a processor automatically. Use only one instance of this block per project.
Use the Fingerprint scanner initialize block to specify which Propeller I/O pins are connected to your device. I/O pins available for this use will vary with board type.
If you have defined a constant using the constant define block, the constant will show up in all of the pin menus and can be selected instead of a numbered pin:
If you forget to use this block in your project, a triangle warning icon will appear on other Fingerprint scanner blocks as a reminder.
The Fingerprint scanner capture block lets you manage the fingerprint scans that are stored on the device. The action options from the drop-down menu are:
The Fingerprint scanner scan block can perform three different actions and provides a value based on the outcome of the action. (However, none of these actions capture and save a new scan onto the device.)
The Fingerprint Scanner can scan and store up to 1000 fingertip image captures. Your BlocklyProp project can compare a new scan to a specific capture by ID, or search all its captures for a match.
Using the connections shown in the wiring image above, this example uses the Terminal to prompt a user to scan and assign an ID to their fingerprint, and then check that their fingerprint matches the assigned ID.
For Activity Board, FLiP, and Other board types. Not available for Badge or Scribbler Robot board types.
These blocks are compatible with GPS modules delivering an NMEA 0183 serial data stream. This includes Parallax's SIM33EAU GPS Module (#28504) and PAM-7Q (Parallax #28509).
New to this sensor? Click here to see an example schematic and quick Blockly program [80] to help you get started.
This block launches a processor automatically. Use only one instance of this block per project.
The GPS Init block configures the communication from your GPS module to your Propeller microcontroller.
If you have defined a constant using the constant define block, the constant will show up in all of the pin menus and can be selected instead of a numbered pin:
If you forget to use the GPS init block first, other GPS blocks will show a triangle warning icon as a reminder:
* I/O pin numbers available in this dropdown will depend on your selected board type.
The GPS has satellite fix block lets you know if your GPS module is receiving a usable satellite signal. The block provides 1 if true, 0 if false.
The GPS latitude block provides the latitude in microdegrees (millionths of degrees). Latitudes north of the Earth's equator are positive values, and latitudes south of the Earth's equator are negative values.
The GPS longitude block provides the longitude in microdegrees (millionths of degrees). Longitudes east of the Prime Meridian to are positive values, and longitudes west of the Prime Meridian are negative values.
The GPS heading block provides heading—the direction of travel—in degrees clockwise from magnetic north. The GPS module must be moving faster than two miles per hour to provide a meaningful heading value.
The GPS altitude block provides altitude above sea level in centimeters.
The GPS speed block provides the speed that the GPS module is traveling, in the chosen unit of measurement. Choose mph (miles per hour) or knots (nautical miles per hour) from the drop-down menu. The GPS module must be moving faster than two miles per hour to provide a meaningful speed value.
The GPS satellites tracked block provides the number of satellites that the GPS module can see.
These blocks are compatible with GPS modules delivering an NMEA 0183 serial data stream. This includes the SIM33EAU GPS Module (Parallax #28504) and the PAM-7Q (Parallax #28509).
Schematic for Parallax's SIM33EAU GPS Module (#28504) and Propeller microcontroller for the example functions below. Wiring may be different for the PAM-7Q or other GPS modules, please see their product guides for specifics.
FLiP Wiring Alert! If using the Propeller FLiP module with a GPS module, use a 3-pin extension cable to provide some distance between the two modules to improve satellite reception and reduce interference.
The GPS Data Output Blockly example retrieves longitude, latitude, speed, heading, elevation, and number of satellites from the GPS module. The units are converted to decimal degrees and displayed in the Blockly terminal. The underlying GPS library is compatible with NEMA-formatted GPS strings.
This example features a large number of blocks. We recommend that you download the SVG file containing this pre-arranged program below, rather than recreate it block-by-block.
Your workspace should now contain the following program (note that these blocks are displayed in a different layout in this image):
These blocks may be used with the HMC5883L compass module (#29133, discontinued) [82] blocks and the Propeller Activity Board WX, Propeller FLiP module, and Other board types. Not available for Badge or Scribbler Robot board types.
The Compass initialize block sets up the communication between the Propeller chip and the compass module.
Set each drop-down to match the Propeller I/O pins connected to the HMC5883L compass module's SCL and SDA pins. (The drop-down options go to 27, but do not set higher than 17 with the Propeller Activity Board WX, as P18-P31 are already connected to other built-in circuits on this board.)
The Compass heading block stores the current unadjusted heading measured by the HMC5883L, in degrees as an integer, ranging from 0 to 359.
Compatible with the Propeller Activity Board WX, Propeller FLiP, or Other board types. Not available for Badge or Scribbler Robot board types.
SOLO ONLY! These blocks are only supported by BLOCKLYPROP SOLO [1]. No login required, save your files on your computer!
These blocks are for using the LIS3DH 3-Axis Accelerometer with ADC (#29020) [83]. The blocks support a 3-wire SPI interface as shown. You may also use the device's analog to digital converter to monitor the voltage on a circuit connected its AD1 pin or its AD2 or AD3 pads. Connect AD1 to reference voltages for calibration, explained in the blocks below.
An acceleration meter (accelerometer) senses the forces that acceleration and gravity exert on a small mass inside the sensor. Think about that feeling of being pressed into your seat back as your car speeds up rapidly. Now think about the feeling of how gravity pulls you to the ground. Those are examples of the forces that an accelerometer senses and reports. The LIS3DH is a 3-axis accelerometer module that can measure up to +/- 16g of acceleration in 3 axes up to 50 times per second.
The LIS3DH initialize block is required to set up the sensor connections. If you forget to use this block, you will see a triangle warning symbol on other LISD3DH blocks as a reminder.
The LIS3DH initialize block will show additional fields if you choose tilt or voltage options on on LIS3DH read blocks, and if you include the LIS3DH temperature block in your project.
The LIS3DH read block stores the sensor's measurements in variables you have created ahead of time. Choose a type of value to measure and store from the top dropdown menu:
Read about each option below.
The LIS3DH temperature block provides the temperature in the units you choose from the dropdown. When you place this block in the canvas, Set ambient temperature fields appear in the LIS3DH Initialization block. Enter the ambient temperature as taken with a separate thermometer. The operating temperature range is:
The value this block returns is not the absolute temperature. It returns the change in temperature during program run time, added to the Set ambient temperature value you entered in the LIS3DH Initialization block. So, if the temperature does not change during program run time, this block will return whatever Set ambient temperature value you gave it, even if it is inaccurate.
Available for Activity Board, FLiP and Other board types. Not available for Badge or Scribbler Robot board types.
The LSM9DS1 9-axis IMU (#28065) [84] measures acceleration, rotation, and magnetic field strength along three perpendicular axes, shown and labeled in the image below:
The IMU initialize block sets up the communication between the Propeller chip and the compass module.
If you have defined a constant using the constant define block, the constant will show up in all of the pin menus and can be selected instead of a numbered pin:
If you forget to use this block, a triangle warning icon will appear on other IMU blocks as a reminder:
Set each drop-down to match the Propeller I/O pins connected to the IMU's SCL, SDIO, CS_AG, and CS_M pins. It is not necessary to connect the INT_A/G or INT_M pins. However, they may be read using a check PIN block if they are connected. I/O pins available will vary by board type.
The IMU calibrate magnetometer block is used to calibrate the magnetometer on the IMU module.
Use this block immediately after the IMU initialize block. Hold the IMU (or your project that includes the IMU) flat but in a space with enough room to rotate it around. Once the calibration has started, if you are using the ActivityBoard or FLiP, the P26 and P27 LEDs will turn on.
Once the calibration has started, it will collect samples for 30 seconds.
If you only plan to use the IMU as a compass (for heading using 2 of the axes), you will want to set your device flat and rotate it slowly around during the 30-second sample collection. If you need all 3 axes calibrated, you will need to slowly rotate your project around each of the IMU's 3 axes during the 30 seconds sample collection.
You do not need to repeat the calibration again unless your environment (such as moving your project into or out of a building) or your location changes.
The IMU read block stores the current accelerometer, gyroscope, or magnetometer measurements from each of the 3 axes into the specified variables. The Accelerometer measurements are in g-100ths. This means that a measurement of 1 g (1 Earth gravity) of acceleration will read as +100 in one direction or -100 in the opposite direction. Gyroscope measurements are in hundredths of degrees of rotation per second (DPS-100ths). Magnetometer measurements are in gauss-100ths.
The IMU tilt block stores the current tilt angles measured by the IMU's accelerometer, measured in degrees as an integer, ranging from -180 to 180. You must specify the axis that is pointing up/down (vertically) to ensure that your measurements are correct. The tilt of the remaining to axes are then stored in the variables specified by their respective drop-down menus.
The IMU heading block stores the current unadjusted heading measured by the IMU's magnetometer, in degrees as an integer, ranging from 0 to 359. You must specify which axes are pointed in which directions relative to the observer for the code to correctly resolve the compass heading.
Calibrate your IMU's magnetometer before using the IMU heading block. You may also need to re-calibrate it if your environment or location changes from the last time it was calibrated.
Compatible with the Propeller Activity Board WX, Propeller FLiP, or Other board types. Not available for Badge or Scribbler Robot board types.
These blocks are for using the MMA7455 3-axis accelerometer module (#28526, discontinued) [85].
An acceleration meter (accelerometer) senses the forces that acceleration and gravity exert on a small mass inside the sensor. Think about that feeling of being pressed into your seat back as your car speeds up rapidly. Now think about the feeling of how gravity pulls you to the ground. Those are examples of the forces that an accelerometer senses and reports. The MMA7455 is a 3-axis accelerometer module that can measure up to +/- 8g of acceleration in 3 axes up to 250 times per second.
The Accelerometer initialize block is used to set up the MMA7455 accelerometer module. Match each dropdown menu to the Propeller I/O pin connected to the CS, DATA, and CLK pins on the accelerometer module.
(The drop-down options go from 0 to 27, but do not set higher than 17 with the Propeller Activity Board WX, as P18-P31 are already connected to other built-in circuits on this board.)
The Accelerometer store values block stores the sensor's x-axis, y-axis, and z-axis measurements in the chosen variable items.
Propeller Activity Board WX, Propeller FLiP module, or Other board types. Propeller I/O pin availability will vary by board type. Not available for Badge or Scribbler Robot board types.
These blocks are for using the MEMSIC2125 Dual-Axis Accelerometer (#28017) [86].
New to this sensor? Click here to see an example schematic and quick Blockly program [87] to help you get started.
The PIN menu on all of the Memsic 2-Axis blocks can be set to "other." When "other" is chosen, the dropdown menu disappears, and it is replaced with an input. You can then use any block that provides a numeric value such as a number value, get variable, or constant value block:
The Memsic x acceleration block returns the approximate acceleration measured by the Memsic sensor. Acceleration is measured in terms of g (acceleration due to earth's gravity): a value of +/-1250 corresponds to approximately +/- 1 g.
Set the PIN dropdown to the Propeller I/O pin connected to the sensor’s Xout pin.
The Memsic y acceleration block returns the approximate acceleration measured by the Memsic sensor. Acceleration is measured in terms of g (acceleration due to earth's gravity): a value of +/-1250 corresponds to approximately +/- 1 g.
Set the PIN dropdown to the Propeller I/O pin connected to the sensor’s Yout pin.
The Memsic rotation block measures how much the sensor is rotated if it is held vertically (zero degrees is when the triangle on the Memsic sensor is pointed straight up. The sensor returns a measurement in degrees where 0 degrees is straight up, and 180 degrees is straight down.
Set the PIN dropdowns to the Propeller I/O pin connected to the sensor’s Xout and Yout pins.
The Memsic x tilt block returns a measurement of how much the sensor has tilted in the x (sideways) direction when the top of the sensor is level with the ground. The value returned is +/- 90 degrees.
Set the PIN dropdown to the Propeller I/O pin connected to the sensor’s Xout pin.
The Memsic y tilt block returns a measurement of how much the sensor has tilted in the x (front to back) direction when the top of the sensor is level with the ground. The value returned is +/- 90 degrees.
Set the PIN dropdown to the Propeller I/O pin connected to the sensor’s Yout pin.
The Memsic MX2125 Dual-axis Accelerometer is great for measuring tilt, vibration, rotation, and let’s not forget its namesake, acceleration. A few MX2125 project ideas might include a tilt video game controller, tilt robot controller, robot hill climbing sensor, and radio-controlled vehicle acceleration, speed, and position data logger.
Using the connections shown in the wiring diagram above, this example will display X and Y tilt in the Terminal.
Compatible with the Propeller Activity Board WX, Propeller FLiP module, or Other board types. Propeller I/O pin availability will vary by board type. Not available for Badge or Scribbler Robot board types.
This block works with any of the Parallax PIR (passive infrared) motion sensors:
New to PIR sensors? Click here to see an example schematic and quick Blockly program [91] to help you get started.
The PIR sensor block returns a 0 (zero) if no motion is detected, and a 1 (one) if a motion is detected. The PIN dropdown must be set to the pin connected to PIR sensor’s out pin.
A PIR Sensor can tell when something nearby moves. PIR stands for "Passive InfraRed". The sensor detects the pattern of infrared energy in its surroundings. If the pattern changes, the sensor outputs a high signal. The Propeller microcontroller only needs to monitor this signal with an I/O pin to know if something is moving around nearby.
Using the connections shown in the wiring diagram above, this example will display the status of the PIR Sensor in the Terminal. A value of "1" indicates the sensor has been triggered (or set high), and a "0" is the resting (or low) state.
It is typical for the sensor to be triggered when it is first powered up and getting an infrared reading from its environment. This may last up to 30 seconds.
Compatible with Propeller Activity Board WX, Propeller FLiP module, and Other board types. Not available for Badge or Scribbler Robot board types. Use this block with the following distance sensors from Parallax:
New to these sensors? Click here to see an example schematic and quick Blockly program [94] to help you get started.
The Ping))) distance block returns the distance to an object detected by the sensor, between 1 inch (3 cm) and 124 inches (315 cm) away.
The PIN menu on this block can be set to "other." When "other" is chosen, the drop-down menu disappears, and it is replaced with an input. You can then use any block that provides a numeric value such as a number value, get variable, or constant value block:
The Ping))) Ultrasonic Distance Sensor measures the roundtrip echo time of ultrasonic sound to determine how far away an object is. It can measure distances anywhere from 3 centimeters to 3 meters. In addition to being a great distance sensor for robots, it’s also useful for detecting people passing through doorways, viewing art exhibits, approaching holiday props, and more.
Parallax PING))) Ultrasonic Distance Sensor (left) and Parallax Laser PING (right).
ActivityBot Alert! Use a different I/O pin if your board is on a robot - a servo is connected to P15!
Use a 2 k-ohm resistor (red-black-red) between the PING))) sensor's SIG pin and the Propeller I/O pin.
Using the connections shown in the wiring diagram above, this example will display PING))) distance measurements in the Terminal Window.
Use this block with the serial RFID Reader (#28140) [95] and the Propeller Activity Board WX, Propeller FLiP module, and Other board types. Not available for Badge or Scribbler Robot board types.
New to this sensor? Click here to see an example schematic and quick Blockly program [96] to help you get started.
This block launches a processor automatically. Use one instance of this block per project.
The RFID initialize block is used to set up the Parallax RFID module. The EN and SOUT pins on the module must be matched to the Propeller Activity Board pins they are connected to.
If you have defined a constant using the constant define block, the constant will show up in all of the pin menus and can be selected instead of a numbered pin:
The RFID read block reads the ID number from an RFID tag near the sensor. If no tag is detected, it provides a value of 0 (zero).
The RFID disable/enable block depending on the option chosen in the dropdown menu, disables or enables the RFID sensor.
The RFID close block closes the RFID object and frees up the resources the object was using inside of the Propeller microcontroller.
RFID stands for Radio Frequency Identification. The Parallax RFID Reader Serial + Tag Sampler (#32390) [97] includes several unique RFID tags.
Using the connections shown in the wiring diagram above, this example will display the unique identification number(s) of your RFID tag(s) in the Terminal. Please note this code is for the Serial RFID Reader, not the USB version.
Compatible with all Propeller board types
Use this block with a Sony protocol Infrared Remote (#020-00001) [98] and infrared receiver (#350-00039)
New to this sensor? Click here to see an example schematic and quick Blockly program [99] to help you get started.
The Sony Remote value block returns a value detected by the IR receiver that indicated which button on the remote was pressed. If no button press was detected, this block provides a value of -1.
The PIN menu this block can be set to "other." When "other" is chosen, the drop-down menu disappears, and it is replaced with an input. You can then use any block that provides a numeric value such as a number value, get variable, or constant value block:
An IR receiver can detect bursts of infrared light sent by a common remote controller (like for a television), and then output a pattern of high/low signals to a Propeller I/O pin.
Configure your remote for the Sony protocol, following its manufacturer instructions. (If you purchased the Brightstar brand remote from Parallax, hold the Setup button until the light near it comes on. Enter 6-0-5 and the light should go off. Done!)
Using the connections shown in the wiring diagram above, this example displays the number of the button pressed on your remote in the Terminal. When no button is pressed, the Sony Remote value block sends a -1, and the message Button press = none will appear in the Terminal.
These blocks are for Parallax's Sound Impact Sensor (#29132) [100] and the Propeller Activity Board WX, FLiP, or Other board types. Not available for Badge or Scribbler Robot board types.
New to this sensor? Click here to see an example schematic and quick Blockly program [101] to help you get started
This block launches a processor automatically. Use only one instance of this block per project.
The Sound Impact initialize block sets up the Sound Impact Sensor.
If you have defined a constant using the constant define block, the constant will show up in all of the pin menus and can be selected instead of a numbered pin:
If you forget this block, the other Sound Impact Sensor blocks will display a triangle warning icon as a reminder:
The Sound Impact get count block returns how many sound impacts (loud sounds) were detected since the last time this block was used. If no sound impacts were detected, it provides a value of zero.
The Sound Impact close block makes the Propeller microcontroller stop listening to the Sound Impact Sensor and frees up the resources it was using inside of the Propeller.
The Sound Impact Sensor detects sound from up to 3 meters away, lending noise-activation possibilities to your microcontroller projects
Use a 2.2 k-ohm resistor (red-red-red) between the Sound Impact Sensor's SIG pin and the Propeller I/O pin.
Using the connections shown in the wiring diagram above, this example will display "Sound detected!" if the sensor detects one or more sound events, and "No sound detected." otherwise.
Available for Activity Board, FLiP, and Other board types. Not available for Badge or Scribbler Robot board types. I/O pin range options will vary with board type.
These blocks are for the CM2302 Temperature & Humidity Sensor (#28059 [102]). It is also compatible with most DHT22 and AM2302 models.
See the next page for a Getting Started tutorial, and/or watch the Tiny Tutorial video below.
The Temp & Humidity read block triggers a supported sensor connected to the specified I/O pin to take and store temperature and relative humidity readings. Readings can be updated every 30 seconds.
The PIN menu this block can be set to "other." When "other" is chosen, the dropdown menu disappears, and it is replaced with an input. You can then use any block that provides a numeric value such as a number value, get variable, or constant value block:
The Temp & Humidity value block provides the specified measurement from the data stored by the last Temp & Humidity read block. Choose the type of data from the drop-down menu. Options are:
BlocklyProp uses integer math: The value returned by this block is 10 times the temperature or relative humidity measured by the sensor. To display the reading, use a print multiple block's floating point option for the Terminal, LCD, or OLED, and choose to divide the value by 10 on that block. See the wiring diagram and example code on the next page.
The CM2302 Temperature and Humidity Sensor can take a reading of temperature and relative humidity for use by a microcontroller such as the Propeller.
The example code below displays the temperature and relative humidity in the BlocklyProp Terminal. BlocklyProp uses integer math; the Temp & Humidity value block provides a value that is 10 times larger than the sensor reading.
To display the sensor readings as floating-point values, use the Terminal print multiple block. Click its gear icon, drag in text and floating point number blocks, and then click specify digits box:
Here is the complete code listing:
Save and run the project to display the data in the BlocklyProp Terminal:
Block availability varies by board type. microSD card slots are included on the Activity Board WX and Badge WX boards. A pad for a microSD card holder is included on the Project Board USB.
For Propeller Activity Board WX, Propeller FLiP, Scribbler, and or Other board types. Not available for Badge or board types.
The EEPROM read block reads data from the EEPROM memory on the Propeller Activity Board and saves it in a variable.
Choose memory addresses carefully. Numbers take up 4 bytes of memory, a byte takes 1 byte of memory, and a string takes up 1 byte for each letter in the string plus 1 byte to indicate the end of the string (“Hello” would take 6 bytes of memory). The range used for address access by this block (0 to 7675) maps to the actual address range 32768 to 40443 in the Propeller Activity Board's upper EEPROM.
For Propeller Activity Board WX, Propeller FLiP, Scribbler, and or Other board types. Not available for Badge or board types.
The EEPROM write block writes data to the EEPROM memory on the Propeller Activity Board.
Choose memory addresses carefully. Numbers take up 4 bytes of memory, a byte takes 1 byte of memory, and a string takes up 1 byte for each letter in the string plus 1 byte to indicate the end of the string (“Hello” would take 6 bytes of memory). The range used for address access by this block (0 to 7675) maps to the actual address range 32768 to 40443 in the Propeller Activity Board's upper EEPROM.
Compatible only with Badge board types.
The Memory store contact block stores up to 128 characters of text to EEPROM memory.
Compatible only with Badge board types.
The Memory check contact block checks to see if a string of text has already been stored in EEPROM memory.
Compatible only with Badge board types.
The Memory get contact block retrieves text with a certain index number from EEPROM memory.
Compatible only with Badge board types.
The Memory count contacts block returns how many contacts are currently stored in EEPROM memory.
Compatible only with Badge board types.
The Memory erase contacts block erases entire user portion of EEPROM memory by placing 255 in each location.
Available for the Activity Board WX, FLiP or Project Board USB, Badge WX, and Other board types
The SD file open block opens the specified file on the SD card. Filenames can be up to 8 characters long, and a 3 character extension such as .TXT is required.
Available for the Activity Board WX, FLiP or Project Board USB, Badge WX, and Other board types
The SD file read/write block is used to read from, write to, or close the current file on the SD card.
Available for the Activity Board WX, FLiP or Project Board USB, Badge WX, and Other board types
The SD file set block sets or retrieves the current file pointer (location in characters where reads or writes begin from).
BlocklyProp blocks for analog and pulse I/O. Block availability will vary by board type.
For Propeller Activity Board WX, FLiP and Other board types. Not available for Badge or Scribbler Robot board types.
The RC time (formerly RC charge/discharge) block sets the specified Propeller I/O pin to an input and reports how long it takes for an RC (resistor/capacitor) circuit to either charge or discharge across the pin's logic threshold. The value provided by the block is in microsecond units. This block must be used in conjunction with other blocks to charge (or discharge) the circuit before taking the measurement.
The PIN menu this block can be set to "other." When "other" is chosen, the dropdown menu disappears, and it is replaced with an input. You can then use any block that provides a numeric value such as a number value, get variable, or constant value block:
The RC time block is useful for circuits with a variable resistor or other means to affect current flow, including potentiometers, phototransistors, thermistors, and some pressure sensors. See Read a Potentiometer with RC Time [103] for an example of this block in action.
Block availability varies by board type.
Propeller Activity Board board type only
The A/D read block is designed for the A/D and D/A circuits built directly into the Propeller Activity Board (original and WX)
This block reads and reports the voltage input on the A/D channel chosen in the drop-down menu. The value provided by the block is in volt-hundredths: if +2.50 volts is applied to the A/D channel, the block will provide a value of 250. It can be attached to a variable set block or used wherever a number value block is accepted.
Propeller Activity Board board type only
This block launches a processor automatically. Using a second block for an additional D/A channel will not launch an additional processor.
The D/A output block sets the output voltage on the D/A channel chosen in the drop-down menu. The block expects a value in volt-hundredths: if value block placed in this block is 250, the D/A will output +2.50 volts.
Propeller FLiP or Project Board and Other board types only
The A/D chip read block is designed for specific analog to digital converter chips that can be added to the prototyping area of Propeller boards. This includes the ADC0831 [104]and MCP3002 [105]carried by Parallax, as well as other chips in the MCP3 line.
This block reports the voltage input on a channel of a supported A/D converter chip. It can be attached to a variable set block or used wherever a number value block is accepted. To use the block:
The value provided by the block is in volt-hundredths: if +2.50 volts is applied to the A/D channel, the block will provide a value of 250. Unless the A/D chip set Vref block is used, this block assumes that the A/D chip's Vref pin is connected to +3.3 volts.
Propeller FLiP or Project Board and Other board types only
The A/D chip set Vref block is designed for specific analog to digital converter chips that can be added to the prototyping area of Propeller boards. This includes the ADC0831 [104]and MCP3002 [105]carried by Parallax, as well as other chips in the MCP3 line.
This block is used to improve the accuracy of the value returned by the A/D chip read block and/or to use a different voltage (such as +5.0 volts) for the A/D chip's measurements. Use this block before the A/D chip read block in your project, or at the beginning of your program to set the Vref value globally. Enter the value of the voltage applied to the A/D chip's Vref pin. The number entered is in volt-hundredths; if +3.3 volts is applied to Vref, enter 330.
For Propeller Activity Board WX, FLiP and Other board types. Not available for Badge or Scribbler Robot board types.
The PIN menu on each of these blocks can be set to "other." When "other" is chosen, the dropdown menu disappears and it is replaced with an input. You can then use any block that provides a numeric value such as a number value, get variable, or constant value block:
The pulse-in block provides a value that represents a measurement of how long a pulse is in a low or high state in units of microseconds. The Propeller microcontroller begins measuring as soon as the PIN transitions into the state and stops and reports the measurement when it transitions out of the state.
The pulse-out block sends a pulse out on the PIN set by the drop-down menu. The value block sets the width of the pulse output in microseconds.
The count pulses block provides the number of pulses detected over a certain period of time.
For Propeller Activity Board WX, FLiP and Other board types. Not available for Badge or Scribbler Robot board types. Not available for Badge or Scribbler Robot board types.
This block launches a processor automatically. Each subsequent instance of this block changes the PWM behavior as configured, but does not launch an additional processor.
The PWM set block begins outputting a pulse-width modulated signal on the pin specified in the drop-down box with a duty cycle set by the value block is. For example, if the value block is set to 75, the PWM signal will be on 75% of the time and off 25% of the time. There are two PWM channels available on the Propeller microcontroller, so up to two PWM set blocks (one set to channel A and the other set to channel B) operating at one time. Setting the duty cycle to 0 (zero) turns the PWM signal off.
The PIN menu this block can be set to "other." When "other" is chosen, the drop-down menu disappears, and it is replaced with an input. You can then use any block that provides a numeric value such as a number value, get variable, or constant value block:
Note that the PWM Initialize block has been deprecated, and its functionality was added to the PWM set block
The PWM stop block stops the PWM process and frees up the resources it was using on the Propeller microcontroller.
BlocklyProp blocks for generating audio. See each block for board type compatibility.
Compatible with all Propeller board types
The frequency out block generates pulses of the specified frequency and duration on an I/O pin. An example use would be generating beeps on a piezospeaker.
The PIN menu this block can be set to "other." When "other" is chosen, the dropdown menu disappears, and it is replaced with an input. You can then use any block that provides a numeric value such as a number value, get variable, or constant value block:
This block launches a processor automatically. Use only one instance of this block per project.
Compatible only with the Activity Board WX and Badge WX board types.
The sound initialize block starts the polyphonic (multi-tone) sound process.
Available for Activity Board WX, FLiP, and both Badge board types.
The sound play block controls the frequency, volume, and waveform generated on the selected channel.
Using either text to speech block will launch one processor (only one total, NOT one per block).
For the Hackable Electronic Badge and Badge WX.
The TTS say block phonetically pronounces the letter characters in the attached text string block.
Using either text to speech block will launch one processor (only one total, NOT one per block).
For the Hackable Electronic Badge and Badge WX.
The TTS spell block pronounces each letter character from left to right in the attached text string block.
This block is ONLY available for the Propeller Activity Board WX and Badge WX board type.
This block launches TWO processors automatically.
The WAV play block does the following:
*Compatible with FAT32-formatted microSD cards, such as Parallax #32328 [106].
The WAV file on the microSD card must be in the correct format.
Options from our Sound Library reference section: [107]
WAV BLOCKS MUST BE USED WITH OTHER TYPES OF BLOCKS. The WAV play block launches processors to manage the SD card and generate the audio output. However, once the first processor has launched the others, it will shut itself down if it does not have any other blocks to execute. This breaks the project, and instead of hearing your audio track, you will just hear a buzzing sound. To avoid this, the first processor must keep running.
If your project does other things, like blink lights or make a robot move, your WAV file will play as long as other code keeps running.
If your project does NOT do other things and all you want to do is play the WAV file, do one of these two things:
This block is ONLY available for the Propeller Activity Board WX and Badge WX board type.
The WAV status block provides a value of 1 (one/true) if a WAV file is currently playing and a value of 0 (zero/false) if a WAV file is not currently playing.
This block is ONLY available for the Propeller Activity Board WX and Badge WX board type.
The WAV volume block set the volume of the Propeller’s WAV player. A value of 0 is quietest, and 10 is loudest.
This block is ONLY available for the Propeller Activity Board WX and Badge WX board type.
The WAV stop block stops playing a WAV file.
Compatible only with the Activity Board WX
The WAV set pins block is used only at the beginning of your program to send the WAV file player output to different pins.
Block and I/O pin availability varies by board type.
The PIN menu on these blocks can be set to "other." When "other" is chosen, the dropdown menu disappears, and it is replaced with an input. You can then use any block that provides a numeric value such as a number value, get variable, or constant value block:
This block launches a processor automatically; using up to 14 servos on different Propeller I/O pins will not launch additional processors.
Use this block with the Parallax Standard Servo (#900-00005) [108] and the Propeller Activity Board WX, Propeller FLiP, S3 Robot, and Other board types. Not available for the Badge board type.
The standard servo block sends control pulses to position a Parallax Standard Servo.
Once set, the control pulses will continue until the program encounters another standard servo block or servo disable block for that servo's Propeller I/O pin.
This block launches a processor automatically, using up to 14 instances of this block will not launch additional processors.
Use this block with the Parallax Continuous Rotation Servo (#900-00008) [109] and the Activity Board WX, Propeller FLiP, and Other board types. Not available for Badge or Scribbler Robot board types.
The CR servo speed block sends control pulses to a servo connected to PIN selected by the drop-down menu that tells the servo what speed in which direction to turn. Negative speeds turn the CR (Continuous Rotation) servo clockwise, and positive speeds turn the servo counter-clockwise. A speed of 0 (zero) stops the CR servo. The speed can be from -200 to 200. In most cases, you will notice most of the change in speed from -100 to 100.
The CR servo speed block sends pulses to control speed and direction of a Parallax Continuous Rotation servo.
Once set, the control pulses will continue until the program encounters another standard servo block or servo disable block for that servo's Propeller I/O pin.
*If your Parallax CR Servo rotates slowly or buzzes when set to zero, you may need to center it. Very gently, insert a Philips tip screwdriver into the access hole in the servo's case and slightly twist the potentiometer until the servo holds still.
Use this block with the Parallax Continuous Rotation Servo (#900-00008) [109] and the Activity Board WX, Propeller FLiP, and Other board types. Not available for Badge or Scribbler Robot board types.
The CR servo set ramp block sets the maximum amount that the CR servo’s speed connected to the PIN specified in the drop-down menu can be changed each update cycle. A rampstep of 1 means that the servo’s speed can only change 1 unit every 20ms - meaning that its response will be very sluggish. A rampstep between 4 and 8 is a good compromise between responsiveness and protecting the servo from sudden speed changes that can damage the servo.
This block launches a processor automatically, using up to 4 instances of this block will not launch additional processors.
Use this block with the Parallax Feedback 360° High-Speed Servo (#900-00360) [110] and the Activity Board WX, Propeller FLiP, and Other board types. Not available for Badge or Scribbler Robot board types.
The Feedback 360° servo initialize block sets up communication between the servo and the Propeller microcontroller. If you forget to use this block in your project, a triangle warning will appear on other Feedback 360° servo blocks as a reminder.
Use this block with the Parallax Feedback 360° High-Speed Servo (#900-00360) [110] and the Activity Board WX, Propeller FLiP, and Other board types. Not available for Badge or Scribbler Robot board types.
The Feedback360° servo configure (formerly setup) block sets the maximum value for the servo behavior chosen.
Use this block with the Parallax Feedback 360° High-Speed Servo (#900-00360) [110] and the Activity Board WX, Propeller FLiP, and Other board types. Not available for Badge or Scribbler Robot board types.
The Feedback360° servo setup block sets the value for the servo behavior chosen.
Use this block with the Parallax Feedback 360° High-Speed Servo (#900-00360) [110] and the Activity Board WX, Propeller FLiP, and Other board types. Not available for Badge or Scribbler Robot board types.
The Feedback 360° servo get position block provides the angular position of the specified servo. The origin for the angle is the position the servo was in when initialized. Set the PIN dropdown to the Propeller I/O pin number connected to the servo's control or feedback signal line — either one will work.
The Feedback 360° servo status tests whether the servo is (1/true) or is not (0/false) in the state chosen from the drop-down menu. This block does not change the servo's behavior but merely observes.
The servo disable block stops any servo control signals being sent by the Propeller I/O pin chosen in the drop-down. The servo disable block does NOT free up the processor that was launched by the Standard servo or CR servo speed block.
These blocks are ONLY available for the Propeller Activity Board WX board type.
This block launches a processor automatically. Use only on instance of this block per project.
The Robot initialize block is used to set up the robot to drive. If you forget to use this block at the beginning of your navigation programs, a triangle warning will appear on Robot drive... blocks as a reminder.
Choose a robot option from the drop-down:
**See top of the page for Propeller board specifics.
The Robot set acceleration block is used to set how quickly the motors change their speeds.
With the ActivityBot, when using Robot drive speed the default acceleration is 600 ticks/s2 unless changed with this block. Likewise, with the ActivityBot using Robot drive distance the default acceleration is 400 ticks/s2 unless changed with this block.
The Robot drive speed block sends control pulses to the robot's servos that tells the servos what speed in which direction to drive. Negative speeds drive the wheels backward, and positive speeds drive the wheels forward. Turns can be accomplished by setting the wheels at different speeds. A speed of 0 (zero) stops the wheel*.
Robot drive speed and Robot drive distance don't mix! Use a Robot drive stop block in between them first, if you if you want your ActivityBot to switch from using one type of navigation to the other.
*If your Parallax CR Servo rotates slowly or buzzes when set to zero, you may need to center it. Very gently, insert a Philips tip screwdriver into the access hole in the servo's case and slightly twist the potentiometer until the servo holds still.
The Robot drive distance block makes the wheels of a robot drive a specific distance. This block only works with robots that have encoders: ActivityBot and Arlo. It does not work with Servo Differential Drive.
For the ActivityBot Robot:
Robot drive speed and Robot drive distance don't mix! Use a Robot drive stop block in between them first, if you if you want your ActivityBot to switch from using one type of navigation to the other.
The Robot set maximum speed block affects the drive speeds of two types of blocks, depending on the drop-down selection.
The Robot drive stop block makes both right and left wheels stop turning.
The Robot encoder counts block stores the current encoder count values in ticks, in the specified variables.
Choose the supported robot from the drop-down menu:
This block must be run as its own program with no other blocks.
The ActivityBot calibrate block is ONLY for use with the ActivityBot robot (#32500), the ActivityBot 360° robot (#32600) [45], and the Parallaxy Telepresence Robot (#32800) [113]
The ActivityBot display calibration block displays information about the calibration values stored in the Activity Board's onboard EEPROM. This block must be run as its own program, and it will display information to the terminal window when run.
Currently, the Load firmware block is ONLY for use with the Parallaxy Telepresence Robot (#32800) [113] . The code MUST be loaded to EEPROM. The block loads the Parallaxy firmware for interacting with a Raspberry Pi, which itself is programmed to work with LetsRobot.TV. For more information on Parallaxy software setup, see its letsrobot.readme.io pages here [115].
Block availability varies by board type.
Using most of the System blocks requires a good understanding of the Propeller chip's 8-core architecture. See the P8X32A Propeller Datasheet [16] or the Propeller Manua [116]l for detailed information. The User Defined Code block requires some understanding of Propeller C programming. See the Propeller C Tutorials [117] as a resource.
Only available for the Other board type.
The Wait until counter block pauses program execution until a timing event is reached. Most of the time it is used with the system counter block and an inserted value. This technique can guarantee a specific number of system clock ticks elapse before code execution continues. It can also be used to coordinate code execution in separate cores, where both processes pause until the system counter reaches the same specified value.
Only available for the Other board type.
The cog set register block allows you to set the value of the read/write Cog RAM register selected from the drop-down menu.
Each Propeller core has its own set of registers; this block interacts with the core executing the block code. See the Cog RAM Special Purpose Registers in the P8X32A Propeller Datasheet [16] or the Propeller Manua [116]l for detailed information on these registers.
Only available for the Other board type.
The cog get register block retrieves the value from the read-only or read/write Cog RAM register selected from the drop-down menu:
Each Propeller core has its own set of registers; this block interacts with the core executing the block code. See the Cog RAM Special Purpose Registers in the P8X32A Propeller Datasheet [16] or the Propeller Manua [116]l for detailed information on these registers.
Only available for the Other board type.
The system block can provide one of two different values based on your drop-down menu choice.
This block appears in the System menu for the Other board type. It appears in the Values menu for the Activity Board, FLiP, and Badge board types. It is not available for the S3. For a tutorial using this block, see the Precision Timing with the Propeller [118] tutorial.
Compatible with all Propeller board types (except Scribbler Robot)
This block allows you to integrate your custom C code with your BlocklyProp code.
Using this block often requires you switch between the block and code views to ensure that the custom code you are entering into the fields of this block is placed into the parts of your program that you expect.
Checking the box of any one of the menu items in this block will open more options for your code.
The label field lets you change the text displayed on your new user defined block.
Block color lets you color-match your custom code block to the existing palette.
The includes code, globals code, setups code, main code, and functions code menu options open up a mini code editor for inserting C code.
The inputs drop-down allows you to add up to 9 inputs to your custom code block.
To access the values received in the inputs, add @1, @2, @3, etc. (corresponding to the input's number) into any of the code fields in the block. The @1, @2, @3, etc. is replaced with the code generated by whatever block you place in that input.
When you uncheck the box at the top of the block, you will see the block as you designed it to appear. The shape, color, labels, and inputs you specified will be displayed:
The block's inputs are external by default. Right-click your block and choose "inline inputs" to set the inputs inline.
Links
[1] https://solo.parallax.com
[2] https://learn.parallax.com/tutorials/language/blocklyprop/propeller-blocklyprop-block-reference/blocklyprop-bulk-project
[3] http://learn.parallax.com/support/reference/scribbler-3-robot-block-reference
[4] https://learn.parallax.com/tutorials/language/blocklyprop/getting-started-blocklyprop-solo
[5] https://learn.parallax.com/node/1850
[6] https://learn.parallax.com/s3-blockly-intro
[7] https://learn.parallax.com/support/reference/scribbler-3-robot-block-reference
[8] https://learn.parallax.com/support/download/1741/blocklyprop-faq-schools
[9] https://www.parallax.com/downloads/propeller-activity-board-wx-product-guide
[10] https://www.parallax.com/downloads/propeller-activity-board-guide
[11] https://www.parallax.com/downloads/propeller-flip-module-product-guide
[12] https://www.parallax.com/downloads/propeller-project-board-usb-product-guide
[13] https://www.parallax.com/downloads/scribbler-s3-robot-info-poster
[14] https://www.parallax.com/downloads/hackable-electronic-badge-product-guide
[15] https://www.parallax.com/downloads/badge-wx-product-guide
[16] https://www.parallax.com/downloads/p8x32a-propeller-datasheet
[17] http://learn.parallax.com/ab-blocks/values
[18] http://learn.parallax.com/ab-blocks/variables
[19] http://learn.parallax.com/ab-blocks/arrays
[20] http://learn.parallax.com/ab-blocks/functions
[21] http://learn.parallax.com/tutorials/language/blocklyprop/blocklyprop-functions-and-multicore
[22] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/control
[23] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/servo
[24] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/robot
[25] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/sensor/colorpal
[26] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/sensor/gps
[27] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/sensor/sound-impact-sensor
[28] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/sensor/rfid
[29] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/communicate/protocols
[30] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/communicate/rgb-leds
[31] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/communicate/xbee
[32] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/communicate/wx-wifi/advanced-wx
[33] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/analog-pulses/voltage
[34] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/analog-pulses/pwm
[35] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/audio
[36] http://blockly.parallax.com/blockly/
[37] https://www.parallax.com/downloads/blocklyprop-solo-launcher-and-faq-schools
[38] https://www.parallax.com/product/28084
[39] https://learn.parallax.com/ab-blocks/epaper
[40] https://learn.parallax.com/ab-blocks/OLED
[41] https://www.parallax.com/product/28061
[42] https://learn.parallax.com/ab-blocks/air-quality
[43] http://learn.parallax.com/tutorials/language/blocklyprop/simple-blocklyprop-programs-propeller-boards/variable-blocks
[44] http://www.parallax.com/product/900-00360
[45] http://www.parallax.com/product/32600
[46] http://learn.parallax.com/tutorials/robot/activitybot/blocklyprop-robotics-activitybot
[47] http://blockly.parallax.com/
[48] https://github.com/parallaxinc/BlocklyProp
[49] https://github.com/parallaxinc/BlocklyPropClient
[50] https://github.com/parallaxinc/Cloud-Compiler
[51] https://solo.parallax.com/
[52] http://www.asciitable.com
[53] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/about-naming-things
[54] http://www.parallax.com/product/20300
[55] https://learn.parallax.com/ab-blocks/audio
[56] https://learn.parallax.com/ab-blocks/memory
[57] https://image.online-convert.com/convert-to-bmp
[58] https://29a.ch/ditherlicious/
[59] http://learn.parallax.com/tutorials/language/blocklyprop/simple-blocklyprop-programs-propeller-boards/graphing-data
[60] http://www.parallax.com/product/28087
[61] http://learn.parallax.com/tutorials/language/blocklyprop/oled-display-blocklyprop
[62] http://www.parallax.com/product/28085
[63] http://www.parallax.com/product/28086
[64] https://www.parallax.com/product/27976
[65] https://www.parallax.com/product/27977
[66] https://www.parallax.com/product/27979
[67] http://www.parallax.com/product/32420D
[68] http://www.parallax.com/product/32420S
[69] https://www.parallax.com/product/32416
[70] https://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/communicate/protocols
[71] http://www.parallax.com/product/27800
[72] https://learn.parallax.com/support/reference/activity-board-wx-block-reference/sensor/2-axis-joystick/joystick-wiring-example
[73] http://www.parallax.com/product/27899
[74] https://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/sensor/4-x-4-keypad/4x4-keypad-wiring
[75] http://www.parallax.com/product/28380
[76] https://learn.parallax.com/support/reference/activity-board-wx-block-reference/sensor/colorpal/colorpal-wiring-code-example
[77] http://learn.parallax.com/support/reference/propeller-blocklyprop-block-reference/values
[78] https://www.parallax.com/product/29126
[79] https://learn.parallax.com/support/reference/activity-board-wx-block-reference/sensor/fingerprint-scanner/fingerprint-scanner
[80] https://learn.parallax.com/support/reference/activity-board-wx-block-reference/sensor/gps/gps-wiring-example-code
[81] https://learn.parallax.com/sites/default/files/content/AB-Blockly/Reference/Parallax-BlocklyProp-GPS-Data.zip
[82] https://www.parallax.com/product/29133
[83] https://www.parallax.com/product/29020
[84] http://www.parallax.com/product/28065
[85] https://www.parallax.com/downloads/mma7455-3-axis-accelerometer-module-documentation
[86] http://www.parallax.com/product/28017
[87] https://learn.parallax.com/support/reference/activity-board-wx-block-reference/sensor/memsic-2-axis/memsic-2125-wiring-example
[88] http://www.parallax.com/555-28087
[89] http://www.parallax.com/product/28083
[90] http://www.parallax.com/product/28032
[91] https://learn.parallax.com/support/reference/activity-board-wx-block-reference/sensor/pir/pir-wiring-example-code
[92] https://www.parallax.com/product/28015
[93] http://www.parallax.com/product/28041
[94] https://learn.parallax.com/support/reference/activity-board-wx-block-reference/sensor/ping-distance/ping-wiring-example-code
[95] https://www.parallax.com/product/28140
[96] https://learn.parallax.com/support/reference/activity-board-wx-block-reference/sensor/rfid/rfid-wiring-example-code
[97] https://www.parallax.com/product/32390
[98] https://www.parallax.com/product/020-00001
[99] https://learn.parallax.com/support/reference/activity-board-wx-block-reference/sensor/sony-remote/ir-remote-wiring-example-code
[100] http://www.parallax.com/product/29132
[101] https://learn.parallax.com/support/reference/activity-board-wx-block-reference/sensor/sound-impact-sensor/sound-impact-wiring
[102] http://www.parallax.com/product/28059
[103] http://learn.parallax.com/tutorials/language/blocklyprop/circuit-practice-blocklyprop/read-potentiometer-rc-time
[104] http://learn.parallax.com/tutorials/language/blocklyprop/tilt-tones-blocklyprop
[105] https://www.parallax.com/product/603-00039
[106] https://www.parallax.com/product/8-gb-microsdhc-card/
[107] https://learn.parallax.com/support/reference/sound-library
[108] https://www.parallax.com/product/900-00005
[109] https://www.parallax.com/product/900-00008
[110] https://www.parallax.com/product/900-00360
[111] http://www.parallax.com/product/32500
[112] http://www.parallax.com/product/28966
[113] http://www.parallax.com/product/32800
[114] https://letsrobot.readme.io/docs/build-parallaxy
[115] https://letsrobot.readme.io/docs/parallaxy-software
[116] https://www.parallax.com/downloads/propeller-manual
[117] http://learn.parallax.com/tutorials/propeller-c
[118] http://learn.parallax.com/tutorials/language/blocklyprop/precision-timing-propeller
[119] http://learn.parallax.com/tutorials/language/propeller-c/propeller-c-start-simple
[120] https://github.com/parallaxinc/Simple-Libraries/tree/BlocklyProp/Learn/Simple%20Libraries