Robot-Specific Blocks#
Introduction#
The GO Competition Robot includes Arm Motor controls and robot-specific sensing blocks.
All standard VEXcode VR Blocks are available for use in the GO Competition - Mars Math Expedition Playground.
Below is a list of all available Robot-specific Blocks:
Drivetrain – Move and turn the robot.
Actions
drive — Moves the robot forward or reverse forever.
drive for — Moves the robot forward or reverse for a specific distance.
turn — Turns the robot left or right forever.
turn for — Turns the robot left or right for a specific number of degrees.
turn to heading — Turns the robot to face a specific heading.
turn to rotation — Turns the robot to a specific rotation.
stop driving — Stops the robot’s movement.
Settings
set drive velocity — Tells the robot how fast to drive.
set turn velocity — Tells the robot how fast to turn.
set drive heading — Changes the robot’s current heading to a new heading.
set drive rotation — Changes the robot’s current rotation to a new rotation.
set drive timeout — Sets how many seconds the robot will try to finish a movement.
Values
drive is done — Reports whether the robot is finished moving.
drive is moving — Reports whether the robot is moving.
drive heading — Reports the robot’s current heading from 0 to 359.99 degrees.
drive rotation — Reports the robot’s current rotation.
drive velocity — Reports how fast the robot is driving.
Motion – Move and track the robot’s Arm Motor.
Actions
spin motor – Spins the Arm Motor up or down forever.
spin motor for – Spins the Arm Motor for a specific distance in degrees or turns.
spin motor to position – Spins the Arm Motor to a specific position.
stop motor – Stops the Arm Motor from spinning.
Settings
set motor velocity – Tells the Arm Motor how fast to spin.
set motor timeout – Sets how much time the Arm Motor will try to finish a movement.
set motor position – Changes the Arm Motor’s current position to a new value.
Values
motor is done – Reports whether the Arm Motor is finished moving.
motor is spinning – Reports whether the Arm Motor is spinning.
motor position – Reports the Arm Motor’s current position.
motor velocity – Reports how fast the Arm Motor is spinning, as a percentage from -100% to 100%.
Sensing - Utilize the robot’s sensors.
Eye Sensor
Eye found an object — Reports whether or not the Eye Sensor detects an object within range.
Eye detects color — Reports whether the Eye Sensor detects a specific color.
Eye brightness — Reports the brightness detected by the Eye Sensor.
Eye hue — Reports the hue detected by the Eye Sensor.
Gyro Sensing
detected crash — Reports whether the robot has detected a sudden impact.
The examples on this page use the default Playground start position.
Drivetrain#
The drivetrain controls how the VR Robot drives and turns. The drivetrain can move forward or reverse, turn left or right, turn to headings, and track its rotation.
Actions#
drive#
The drive stack block moves the robot forward or reverse forever. The robot will continue to move until it is given another action, like turning or stopping.
drive [forward v]
Parameters |
Description |
|---|---|
direction |
The direction the robot moves: forward or reverse. |
Example
when started :: hat events
[Drive forward, then stop.]
drive [forward v]
wait (2) seconds
stop driving
drive for#
The drive for stack block moves the robot forward or reverse for a specific distance. The project will wait until the robot is done moving before the next block in the stack runs.
drive [forward v] for (200) [mm v] ▶
Parameters |
Description |
|---|---|
direction |
The direction the robot moves: forward or reverse. |
distance |
The distance the robot drives. This can be an integer or a decimal. |
unit |
The distance unit: mm (millimeters) or inches |
and don’t wait |
Select the arrow ( ▶ ) to expand the block to say and don’t wait, so the next block in the stack will run right away. |
Example
when started :: hat events
[Drive forward.]
drive [forward v] for (500) [mm v] ▶
turn#
The turn stack block turns the robot left or right forever. The robot will continue to turn until it is given another action, like driving or stopping.
turn [right v]
Parameters |
Description |
|---|---|
direction |
The direction the robot turns: left or right. |
Example
when started :: hat events
[Turn right, then stop.]
turn [right v]
wait (2) seconds
stop driving
turn for#
The turn for stack block turns the robot left or right for a specific number of degrees. The turn is relative to the current position of the robot. The project will wait until the robot is done turning before the next block in the stack runs.
turn [right v] for (90) degrees ▶
Parameters |
Description |
|---|---|
direction |
The direction the robot turns: left or right. |
angle |
The number of degrees the robot turns. This can be an integer or a decimal. |
and don’t wait |
Select the arrow ( ▶ ) to expand the block to say and don’t wait, so the next block in the stack will run right away. |
Example
when started :: hat events
[Turn left, then turn around to the right.]
turn [left v] for (90) degrees ▶
turn [right v] for (180) degrees ▶
turn to heading#
A heading is the direction the robot is facing, measured in degrees. The turn to heading stack block turns the robot to face a specific heading from -359 to 359 degrees. The robot will turn the shortest direction to reach the target heading.
The starting heading is 0 degrees.
The project will wait until the robot is done turning before the next block in the stack runs.
turn to heading (90) degrees ▶
Parameters |
Description |
|---|---|
heading |
The heading the robot should face, from -359 to 359 degrees. |
and don’t wait |
Select the arrow ( ▶ ) to expand the block to say and don’t wait, so the next block in the stack will run right away. |
Example
when started :: hat events
[Turn to face the cardinal directions.]
turn to heading (90) degrees ▶
wait (2) seconds
turn to heading (180) degrees ▶
wait (2) seconds
turn to heading (270) degrees ▶
wait (2) seconds
turn to heading (0) degrees ▶
wait (2) seconds
turn to rotation#
The turn to rotation stack block turns the robot to a specific rotation.
Rotation is how much the robot has turned, measured in degrees. At the beginning of a project, the rotation value is set to 0 degrees. Rotation can also be set using the set drive rotation block.
Rotation values are absolute. This means the direction of the turn depends on the robot’s current rotation. Turning right increases the rotation, and turning left decreases the rotation.
For example, if the robot starts at 0 degrees and you turn to a rotation of 720 degrees, it will turn right twice. If you then turn to a rotation of 360 degrees, it will turn left once, because 360 is less than 720.
The project will wait until the robot is done turning before the next block in the stack runs.
turn to rotation (90) degrees ▶
Parameters |
Description |
|---|---|
rotation |
The rotation value, in degrees, that the robot will turn to. This can be an integer or a decimal. |
and don’t wait |
Select the arrow ( ▶ ) to expand the block to say and don’t wait, so the next block in the stack will run right away. |
Example
when started :: hat events
[Turn left, then spin in a circle clockwise and face right.]
turn to rotation (-90) degrees ▶
wait (2) seconds
turn to rotation (450) degrees ▶
stop driving#
The stop driving stack block stops the robot’s movement.
stop driving
Parameters |
Description |
|---|---|
This block has no parameters. |
Example
when started :: hat events
[Drive forward, then stop.]
drive [forward v]
wait [4] seconds
stop driving
Settings#
set drive velocity#
The set drive velocity stack block tells the robot how fast to drive. A higher percentage makes the robot drive faster and a lower percentage makes the robot drive slower.
Every project begins with the robot driving at 50% velocity by default.
Note: A higher velocity makes the robot drive faster, but it may be less precise. A lower velocity makes the robot drive slower, but it can be more precise.
set drive velocity to (50) [% v]
Parameters |
Description |
|---|---|
velocity |
The velocity to drive with from 0% to 100%. |
unit |
The velocity unit: % |
Example
when started :: hat events
[Drive forward at the default velocity.]
drive [forward v] for (100) [mm v] ▶
wait (1) seconds
[Move slower.]
set drive velocity to (20) [% v]
drive [forward v] for (100) [mm v] ▶
wait (1) seconds
[Move faster.]
set drive velocity to (100) [% v]
drive [forward v] for (100) [mm v] ▶
wait (1) seconds
set turn velocity#
The set turn velocity stack block tells the robot how fast to turn. A higher percentage makes the robot turn faster and a lower percentage makes the robot turn slower.
Every project begins with the robot turning at 50% velocity by default.
Note: A higher velocity makes the robot turn faster, but it may be less precise. A lower velocity makes the robot turn slower, but it can be more precise.
set turn velocity to (50) [% v]
Parameters |
Description |
|---|---|
velocity |
The velocity to turn with from 0% to 100%. |
unit |
The velocity unit: % |
Example
when started :: hat events
[Turn at default velocity.]
turn [right v] for (100) degrees ▶
wait (1) seconds
[Turn slower.]
set turn velocity to (20)%
turn [right v] for (100) degrees ▶
wait (1) seconds
[Turn faster.]
set turn velocity to (100)%
turn [right v] for (100) degrees ▶
wait (1) seconds
set drive heading#
A heading is the direction the robot is facing, measured in degrees. The set drive heading stack block changes the robot’s current heading to a new heading value.
For example, if the robot has turned to face right, setting the heading to 0 degrees makes that right-facing position the new 0 degrees. Then the robot can turn to other positions based on that new heading.
set drive heading to (0) degrees
Parameters |
Description |
|---|---|
heading |
The heading value, in degrees, to set for the robot. |
Example
when started :: hat events
[Turn to the left.]
set drive heading to (90) degrees
turn to heading (0) degrees ▶
set drive rotation#
Rotation is how much the robot has turned, measured in degrees. At the beginning of a project, the rotation value is set to 0 degrees. The set drive rotation stack block changes the robot’s current rotation to a new value.
For example, if the robot has made two full turns to the right, its rotation value will be 720 degrees. Setting the rotation to 0 degrees will reset that rotation from 720 to 0 degrees. Then the robot can turn to rotations based on that new value.
set drive rotation to (0) degrees
Parameters |
Description |
|---|---|
rotation |
The rotation value, in degrees, to set for the robot. This can be an integer or a decimal. |
Example
when started :: hat events
[Spin counterclockwise two times.]
set drive rotation to (720) degrees
turn to rotation (0) degrees ▶
set drive timeout#
The set drive timeout stack block sets how many seconds the robot will try to finish a movement. If the robot cannot finish in that time it will stop trying and move on to the next block in the stack. This keeps the robot from getting stuck on a movement.
set drive timeout to (1) seconds
Parameters |
Description |
|---|---|
time |
The number of seconds the robot can try to finish a movement. This can be a whole number or a decimal. |
Example
when started :: hat events
[Drive forward for 1 second, then turn.]
set drive timeout to (1) seconds
drive [forward v] for (25) [inches v] ▶
turn [right v] for (90) degrees ▶
Values#
drive is done#
The drive is done Boolean block reports whether the robot is finished moving. This can be used to control the timing of other behaviors based on the robot’s movement.
True — The robot is finished moving.
False — The robot is still moving.
This block works together with drivetrain blocks that have the and don’t wait parameter.
<drive is done?>
Parameters |
Description |
|---|---|
This block has no parameters. |
Example
when started :: hat events
[Start spinning when the drive is complete.]
drive [forward v] for (200) [mm v] ◀ and don't wait
wait until <drive is done?>
turn [right v] for (360) degrees ▶
drive is moving#
The drive is moving Boolean block reports whether the robot is moving. This can be used to control the timing of other behaviors based on the robot’s movement.
True — The robot is moving.
False — The robot is not moving.
This block works together with drivetrain blocks that have the and don’t wait parameter.
<drive is moving?>
Parameters |
Description |
|---|---|
This block has no parameters. |
Example
when started :: hat events
[Print that the robot is moving while it is still driving.]
drive [forward v] for (200) [mm v] ◀ and don't wait
while <drive is moving?>
print [Still Moving...] ▶
wait (0.1) seconds
clear screen
end
print [Done!] ▶
drive heading#
A heading is the direction the robot is facing, measured in degrees. The drive heading reporter block reports that heading from 0 to 359.99 degrees.
The robot’s starting heading is 0 degrees.
(drive heading in degrees)
Parameters |
Description |
|---|---|
This block has no parameters. |
Example
when started :: hat events
[Display the heading after turning.]
turn [right v] for (450) degrees ▶
print (drive heading in degrees) on screen ◀ and set cursor to next row
drive rotation#
Rotation is how much the robot has turned, measured in degrees. At the beginning of a project, the rotation value is set to 0 degrees. The drive rotation reporter block reports the robot’s current rotation.
Turning right increases the rotation, and turning left decreases the rotation. For example, making two full turns to the right will report a rotation of 720 degrees.
(drive rotation in degrees)
Parameters |
Description |
|---|---|
This block has no parameters. |
Example
when started :: hat events
[Display the rotation after turning.]
turn [right v] for (450) degrees ▶
print (drive rotation in degrees) on screen ◀ and set cursor to next row
drive velocity#
The drive velocity reporter block reports how fast the robot is driving.
(drive velocity in [% v])
Parameters |
Description |
|---|---|
unit |
The velocity unit: % |
Example
when started :: hat events
[Display the velocity after driving.]
drive [forward v] for (200) [mm v] ▶
print (drive velocity in [% v]) on screen ◀ and set cursor to next row
Motion#
The GO Competition Advanced 2.0 Robot uses the arm motor to raise and lower the arm so it can pick up, lift, and carry objects.
Actions#
spin motor#
The spin motor stack block spins the Arm Motor up or down forever. The motor will continue to spin until it is given another action, like spinning in a different direction or stopping.
spin [ArmMotor v] [up v]
Parameters |
Description |
|---|---|
motor |
The motor to spin: ArmMotor. |
direction |
The direction the motor spins: up or down. |
Example
when started
[Raise the Arm Motor, then stop.]
spin [ArmMotor v] [up v]
wait (1) seconds
stop [ArmMotor v]
spin motor for#
The spin motor for stack block spins a motor for a specific distance. The spin is relative to the current position of the motor. The project will wait until the motor is done spinning before the next block in the stack runs.
spin [ArmMotor v] [up v] for [90] [degrees v] ▶
Parameters |
Description |
|---|---|
motor |
The motor to spin: ArmMotor. |
direction |
The direction the motor spins: up or down. |
distance |
The distance the motor spins. Degrees use integers. Turns can use integers or decimals. |
unit |
The distance unit: degrees or turns. |
and don’t wait |
Select the arrow ( ▶ ) to expand the block to say and don’t wait, so the next block in the stack will run right away. |
Example
when started
[Raise the Arm Motor by 200 degrees.]
spin [ArmMotor v] [up v] for [200] [degrees v] ▶
spin motor to position#
The spin motor to position stack block spins a motor to a specific position.
A motor’s position is how far it has spun, measured in degrees or turns. One turn is equal to 360 degrees. At the beginning of a project, the motor position is set to 0 degrees. The motor position can also be set using the set motor position block.
Position values are absolute. This means the direction of the spin depends on the motor’s current position.
For example, if the motor starts at 0 degrees and spins to a position of 720 degrees, it will spin forward two turns. If it then spins to a position of 360 degrees, it will spin reverse one turn, because 360 is less than 720.
spin [ArmMotor v] to position [90] [degrees v] ▶
Parameters |
Description |
|---|---|
motor |
The motor to spin: ArmMotor. |
position |
The position value the motor will spin to. Degrees use integers. Turns can use integers or decimals. |
unit |
The position unit: degrees or turns. |
and don’t wait |
Select the arrow ( ▶ ) to expand the block to say and don’t wait, so the next block in the stack will run right away. |
Example
when started
[Move the Arm Motor to 180 degrees.]
spin [ArmMotor v] to position [180] [degrees v] ▶
stop motor#
The stop motor stack block stops the selected motor.
stop [ArmMotor v]
Parameters |
Description |
|---|---|
motor |
The motor to stop: ArmMotor. |
Example
when started
[Raise the Arm Motor, then stop.]
spin [ArmMotor v] [up v]
wait (1) seconds
stop [ArmMotor v]
Settings#
set motor velocity#
The set motor velocity stack block tells a motor how fast to spin. A higher percentage makes the motor spin faster and a lower percentage makes the motor spin slower.
set [ArmMotor v] velocity to [50] [% v]
Parameters |
Description |
|---|---|
motor |
The motor to set the velocity of: ArmMotor. |
velocity |
The speed the motor will spin at. Percent uses whole numbers from 0% to 100%. |
unit |
The velocity unit: %. |
Example
when started
[Set the Arm Motor velocity to 100%.]
set [ArmMotor v] velocity to [100] [% v]
spin [ArmMotor v] [up v] for [1] [turns v] ▶
set motor timeout#
The set motor timeout stack block sets how much time a motor will try to finish a movement. If the motor cannot finish in that time, it will stop trying and move on to the next block in the stack. This keeps the motor from getting stuck on a movement.
set [ArmMotor v] timeout to [1] seconds
Parameters |
Description |
|---|---|
motor |
The motor to set the timeout of: ArmMotor. |
time |
The number of seconds the motor can try to finish a movement. This can be a whole number or decimal. |
Example
when started
[Limit Arm Motor movement to 1 second.]
set [ArmMotor v] timeout to [1] seconds
spin [ArmMotor v] [up v] for [3] [turns v] ▶
Position#
motor position#
A motor’s position is how far it has spun, measured in degrees or turns. One turn is equal to 360 degrees. The motor position reporter block reports the motor’s current position.
At the beginning of a project, the motor position is set to 0 degrees. If the motor spins one full turn forward, the position will be 360 degrees or 1 turn. If the motor spins the other direction, the position will be negative.
([ArmMotor v] position in [degrees v] :: custom-motion)
Parameters |
Description |
|---|---|
motor |
The motor to report the position of: ArmMotor. |
unit |
The unit to report the motor position in: degrees or turns. |
Example
when started
[Print the Arm Motor position.]
print ([ArmMotor v] position in [degrees v] :: custom-motion) ▶
set motor position#
A motor’s position is how far it has spun, measured in degrees or turns. One turn is equal to 360 degrees. The set motor position stack block changes the motor’s current position to a new value.
For example, if a motor has spun to 180 degrees, setting the position to 0 degrees will reset that position from 180 to 0 degrees. Then the motor can spin to positions based on that new value.
set [ArmMotor v] position to [0] [degrees v]
Parameters |
Description |
|---|---|
motor |
The motor to set the position of: ArmMotor. |
position |
The position value to set for the motor. Degrees use integers. Turns can use integers or decimals. |
unit |
The position unit: degrees or turns. |
Example
when started
[Set the Arm Motor to 90 degrees, then return to 0 degrees.]
set [ArmMotor v] position to [90] [degrees v]
spin [ArmMotor v] to position [0] [degrees v] ▶
Values#
motor is done#
The motor is done Boolean block reports whether the motor is finished moving. This can be used to control the timing of other behaviors based on the motor’s movement.
True — The motor is finished moving.
False — The motor is still moving.
This block works together with the following Motion blocks that have the and don’t wait parameter: spin motor for and spin motor to position.
<[ArmMotor v] is done?>
Parameters |
Description |
|---|---|
motor |
The motor to report whether it is finished moving: ArmMotor. |
Example
when started
[Check when the Arm Motor has finished moving.]
spin [ArmMotor v] [up v] for [180] [degrees v] ◀ and don't wait
wait (0.1) seconds
if <[ArmMotor v] is done?> then
print [Arm Motor is done.] ▶
end
motor is spinning#
The motor is spinning Boolean block reports whether the motor is spinning. This can be used to control the timing of other behaviors based on the motor’s movement.
True — The motor is spinning.
False — The motor is not spinning.
This block works together with the following Motion blocks that have the and don’t wait parameter: spin motor for and spin motor to position.
<[ArmMotor v] is spinning?>
Parameters |
Description |
|---|---|
motor |
The motor to report whether it is spinning: ArmMotor. |
Example
when started
[Check whether the Arm Motor is moving.]
spin [ArmMotor v] [up v] for [180] [degrees v] ◀ and don't wait
wait (0.1) seconds
if <[ArmMotor v] is spinning?> then
print [Arm Motor is spinning.] ▶
end
motor velocity#
The motor velocity reporter block reports how fast the motor is spinning, as a percentage from -100% to 100%.
A positive value means the motor is spinning forward. A negative value means the motor is spinning in reverse.
([ArmMotor v] velocity in [% v] :: custom-motion)
Parameters |
Description |
|---|---|
motor |
The motor to report the velocity of: ArmMotor. |
unit |
The unit to report the motor velocity in: %. |
Example
when started
[Print the Arm Motor velocity.]
print ([ArmMotor v] velocity in [% v] :: custom-motion) ▶
Sensing#
The virtual Hero Robot also has access to the standard Brain and Drivetrain Sensing Blocks.
Eye#
Eye found an object#
The Eye found an object Boolean block reports whether or not the Eye Sensor detects an object within range.
True — The Eye Sensor detects an object.
False — The Eye Sensor does not detect an object.
<[FrontEye v] found an object?>
Parameters |
Description |
|---|---|
This block has no parameters. |
Example
when started
[Check whether the Front Eye Sensor detects an object.]
if <[FrontEye v] found an object?> then
print [Object detected!] ▶
else
print [No object detected.] ▶
end
Eye detects color#
The Eye detects color Boolean block reports whether the Eye Sensor detects a specific color, based on the detected hue value.
True — The Eye Sensor detects the selected color.
False — The Eye Sensor does not detect the selected color.
To check the exact hue value detected by the Eye Sensor, use the eye hue reporter block.
<[FrontEye v] detects [red v]?>
Parameters |
Description |
|---|---|
color |
The color for the Eye Sensor to detect:
|
Example
when started
[Check whether the Front Eye Sensor detects blue.]
if <[FrontEye v] detects [blue v]?> then
print [Blue object detected.] ▶
end
Eye brightness#
The Eye brightness reporter block reports how much light is reflected back to the Eye Sensor, as a percentage from 0% to 100%.
A higher percentage means more light is reflected back to the Eye Sensor. A lower percentage means less light is reflected back.
([FrontEye v] brightness in %)
Parameters |
Description |
|---|---|
This block has no parameters. |
Example
when started
[Print the brightness detected by the Front Eye Sensor.]
print ([FrontEye v] brightness in %) ▶
Eye hue#
The Eye hue reporter block reports the hue detected by the Eye Sensor as a number from 0 to 359 degrees.
Hue is a way to describe color using numbers around a color wheel.

([FrontEye v] hue in degrees)
Parameters |
Description |
|---|---|
This block has no parameters. |
Example
when started
[Print the hue detected by the Front Eye Sensor.]
print ([FrontEye v] hue in degrees) ▶
Gyro#
The GO Competition Advanced 2.0 Robot uses gyro sensing to detect sudden impacts, such as hitting a wall or object.
detected crash#
The detected crash Boolean block reports whether the robot has detected a sudden impact, such as hitting a wall or object hard enough to quickly change its motion.
True — A crash has been detected.
False — A crash has not been detected.
<detected crash?>
Parameters |
Description |
|---|---|
This block has no parameters. |
Example
when started
[Drive until the robot crashes, then stop.]
drive [forward v]
wait until <detected crash?>
stop driving