# Operators#

## Add#

The **Add** block is used to add any two values together and reports the sum.

The **Add** block can accept decimals, integers, or numeric blocks.

The **Add** block fits in blocks that accept circular spaces, and can accept other circular blocks in it as well.

In this example, the Drivetrain will move forward for 400 mm.

## Subtract#

The **Subtract** block is used to subtract one value from another and reports the difference.

The **Subtract** block can accept decimals, integers, or numeric blocks.

The **Subtract** block fits in blocks that accept circular spaces, and can accept other circular blocks in it as well.

In this example, the Drivetrain will move forward for 400 mm.

## Multiply#

The **Multiply** block is used to multiply any two values together and reports the product.

The **Multiply** block can accept decimals, integers, or numeric blocks.

The **Multiply** block fits in blocks that accept circular spaces, and can accept other circular blocks in it as well.

In this example, the Drivetrain will move forward for 600 mm.

## Divide#

The **Divide** block is used to divide the first value by the second value and reports the dividend.

The **Divide** block can accept decimals, integers, or numeric blocks.

The **Divide** block fits in blocks that accept circular spaces, and can accept other circular blocks in it as well.

In this example, the Drivetrain will move forward for 400 mm.

## Random#

The **Random** block is used to report a random value between the lowest and highest values in the block.

The **Random** block can accept decimals, integers, or numeric blocks.

In this example, the Drivetrain will move forward for a random distance between 700 and 1000 mm.

## Greater than#

The **Greater than** block is used to report if the first value is larger (greater) than the second value.

The **Greater than** block can accept decimals, integers, or numeric blocks.

The **Greater than** block reports true when the first value is larger than the second value and false when the first value is smaller than or equal to the second value.

The **Greater than** Boolean block reports a true or false value and fits in blocks with hexagonal (six-sided) spaces.

In this example, the Drivetrain will move in reverse for 400 mm, because `0 > 50`

returns `False`

.

## Less than#

The **Less than** block is used to report if the first value is less (smaller) than the second value.

The **Less than** block can accept decimals, integers, or numeric blocks.

The **Less than** block reports true when the first value is smaller than the second value and reports false when the first value is greater than or equal to the second value.

The **Less than** Boolean block reports a true or false value and fits in blocks with hexagonal (six-sided) spaces.

In this example, the Drivetrain will move forward for 400 mm, because `0 < 50`

returns `True`

.

## Equal to#

The **Equal to** block is used to report if the first value is the same as, or equal to, the second value.

The **Equal to** block can accept decimals, integers, or numeric blocks.

The **Equal to** block reports true when the two values are exactly the same and reports false when the two values are not the same.

The **Equal to** Boolean block reports a true or false value and fits in blocks with hexagonal (six-sided) spaces.

In this example, the Drivetrain will move in reverse for 400 mm, because `0 = 50`

returns `False`

.

## And#

The **And** block is used to report if two Boolean conditions are both true.

The **And** block reports true when both conditions are true and reports false when one, or both, of the conditions are false.

The **And** Boolean block reports a true or false value and fits in blocks with hexagonal (six-sided) spaces.

In this example, if the Down Eye Sensor detects a red object and the drivetrain is moving at the same time, the Drivetrain will stop moving. Otherwise, the Drivetrain will keep moving forward.

## Or#

The **Or** block is used to report if one of two Boolean conditions are true.

The **Or** block reports true when one (or both) of the conditions are true and reports false when both of the conditions are false.

The **Or** Boolean block reports a true or false value and fits in blocks with hexagonal (six-sided) spaces.

In this example, if the Down Eye sensor detects a red or green object, the Drivetrain will stop. Otherwise, the Drivetrain will keep moving forward.

## Not#

The **Not** block is used to report the opposite (inverse) of the reported Boolean value.

The **Not** block reports true when the Boolean block inside reports false and reports false when the Boolean block inside reports true.

The **Not** Boolean block reports a true or false value and fits in blocks with hexagonal (six-sided) spaces.

In this example, if the Left Bumper Sensor has not been pressed, the Drivetrain will move forward. If the Left Bumper Sensor has been pressed, the Drivetrain will stop.

## Round#

The **Round** block is used to round the inputted value to the nearest integer.

The **Round** block can accept decimals, integers, or numeric blocks.

Decimals that are 0.5 or greater round up and decimals less than 0.5 round down.

The **Round** block fits in blocks that accept circular spaces, and can accept circular blocks in them as well.

In this example, the Drivetrain will move forward for the rounded number of 474 mm.

## Function#

The **Function** block is used to perform a selected math function.

The **Function** block can accept decimals, integers, or numeric blocks.

The available functions are:

abs - absolute value

floor - rounds down to the nearest integer

ceiling - rounds up to the nearest integer

sqrt - square root

sin - sine

cos - cosine

tan - tangent

asin - arcsine or the inverse of sine

acos - arccosine or the inverse of cosine

atan - arctan or the inverse of tangent

ln - the natural logarithm base e

log - logarithm base 10

e ^ - powers of e

10 ^ - powers of 10

The **Function** block fits in blocks that accept circular spaces, and can accept circular blocks in them as well.

In this example, the Drivetrain will move forward for 760 mm.

## Remainder#

The **Remainder** block is used to divide the first value by the second value and report the remainder.

The **Remainder** block can accept decimals, integers, or numeric blocks.

Numbers that divide evenly will report a remainder of zero.

The **Remainder** block fits in blocks that accept circular spaces, and can accept circular blocks in them as well.

In this example, the Drivetrain will wait 2 seconds before moving forward for 200 mm.

## ArcTan2#

The **ArcTan2** block is used to perform the `atan2(y, x)`

math function converted from radians to degrees. This function calculates the angle in degrees from the positive x-axis to a point (x, y), where ‘x’ is the horizontal coordinate and ‘y’ is the vertical coordinate.

The **ArcTan2** block can accept decimals, integers, or numeric blocks.

The **ArcTan2** block reports a value in the range of -180 degrees to 180 degrees, representing the angle between the positive x-axis and the point (x, y).

The **ArcTan2** block fits in blocks that accept circular spaces, and can accept circular blocks in them as well.

In this example, the Robot will turn to face the coordinate `(500, 720)`

.